Pouvons-nous définir une valeur par défaut Git pour récupérer toutes les balises lors d'une extraction à distance?


154

J'ai actuellement une configuration à distance git comme celle-ci:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*

Lorsque j'émets git pullsur le maître de branche, toutes les têtes distantes sont récupérées dans les télécommandes / en amont, puis les télécommandes / en amont / le maître sont fusionnées dans le maître. Toutes les balises qui peuvent être atteintes sont également récupérées en même temps, ce qui est très pratique.

Je voudrais git pullégalement récupérer toutes les balises de la télécommande, pas seulement celles qui sont directement accessibles depuis les têtes. Au départ, j'ai essayé de définir tagopt == --tags, mais j'ai trouvé que cela ne faisait que récupérer les balises et donc tout cassait. (Junio ​​dit même que c'est une horrible erreur de compréhension ).

Existe-t-il un moyen de git pullrécupérer toutes les balises distantes par défaut, en plus des têtes distantes?


1
Un rappel pour moi-même: assurez-vous que vous avez réellement poussé la balise en premier (ne fonctionne pas automatiquement): git push origin <tag_name>
Hafenkranich

Utiliser la tagoptsolution n'est plus une erreur de configuration; à partir de 1.9 / 2.0 (Q1 2014) cela récupérera toutes les balises en plus de ce qui est normalement récupéré.
mgiuffrida

Réponses:


95

Vous devriez être en mesure d'accomplir cela en ajoutant une refspec pour les balises à votre configuration locale. Concrètement:

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    fetch = +refs/tags/*:refs/tags/*

5
Aha, je n'ai jamais réalisé que vous pouviez avoir plusieurs lignes de récupération, j'ai supposé que la dernière serait simplement remplacée. C'est très gentil et explicite.
jleahy

1
Méfiez-vous de l'utiliser avec git 2.21, voir apple.stackexchange.com/questions/352404/…
Vadorequest

306

Un simple a git fetch --tagsfonctionné pour moi.


13
@Fizzix Peut-être que le titre devrait être modifié pour inclure "par défaut". Ce message a répondu à ma question.
Matt Kneiser

2
Cela n'a pas fonctionné pour moi. Je peux voir les balises avec git ls-remote.
dangeroushobo

Cela peut ne pas répondre à la question exacte, mais cela répond à la question dans le titre et c'est ainsi que je l'ai trouvé grâce à la recherche sur le Web.
Hubert Grzeskowiak

68

L' --forceoption est utile pour actualiser les balises locales. Surtout si vous avez des tags flottants:

git fetch --tags --force

L'option git pull a également les --forceoptions, et la description est la même:

Lorsque git fetch est utilisé avec <rbranch>: <lbranch> refspec, il refuse de mettre à jour la branche locale <lbranch> à moins que la branche distante <rbranch> qu'il récupère soit un descendant de <lbranch>. Cette option remplace cette vérification.

mais, selon la doc de --no-tags:

Par défaut, les balises qui pointent vers des objets téléchargés à partir du référentiel distant sont extraites et stockées localement.

Si cette instruction par défaut n'est pas une restriction, vous pouvez également essayer

git pull --force

2
git pull --forcene comprend pasgit fetch --tags --force
Geniy

21

Pour moi, ce qui suit semblait fonctionner.

git pull --tags

Récupérer les balises uniquement, vous vouliez probablement dire: `git fetch --tags`
Yuseferi

Il y a déjà une réponse avec git fetch --tags. Je voulais donner une réponse alternative. pull = chercher + fusionner. Donc, la récupération se produit également.
Vasantha Ganesh K le


1

J'utilise ceci avec magit sur kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.