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?

jleahy
la source
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/*
Joshtkling
la source
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.

russoue
la source
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
Yucer
la source
2
git pull --forcene comprend pasgit fetch --tags --force
Geniy
21

Pour moi, ce qui suit semblait fonctionner.

git pull --tags
Vasantha Ganesh K
la source
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
13

C'est simple. Fait une

git fetch --all

amulamul
la source
1

J'utilise ceci avec magit sur kernel.org

[remote "upstream"]
    url = <redacted>
    fetch = +refs/heads/*:refs/remotes/upstream/*
    tagOpt = --tags
un événement
la source