Git: distinguer les balises locales et distantes

S'il y a des balises dans le référentiel distant, je les obtiens généralement automatiquement lors de la traction. Lorsque je supprime la balise locale créée (git tag -d <tag-name>) et que je tire, la balise supprimée sera recréée. Je peux supprimer des branches/tags distants (git push <remote-branch/tag-name>:<branch/tag-name>), mais comment puis-je détecter que la balise locale a été créée en récupérant une balise distante?

23
demandé sur Mot 2011-03-31 11:12:40

2 réponses

Si vous êtes ennuyé que ces balises soient recréées lorsque vous exécutez git pull, vous désactivez la récupération des balises par défaut avec la télécommande ..tagopt configuration. par exemple, si la distance est origin, alors vous pouvez faire:

git config remote.origin.tagopt --no-tags

Update: pour répondre à votre commentaire, la raison pour laquelle je suggère ceci est qu'il n'y a pas de moyen évident de faire la différence entre une balise créée localement et une balise extraite d'une télécommande. Il n'y a pas non plus de reflog pour balise. Donc, ma suggestion est de supprimer la récupération automatique des balises-vous pouvez ensuite les récupérer vous-même dans un espace de noms différent. Par exemple, vous pouvez faire:

git fetch origin +refs/tags/*:refs/tags/origin/*

... et peut-être créer un alias pour que. Ensuite, lorsque vous voulez récupérer des balises, elles seront nommées, par exemple, refs/tags/origin/tag1 au lieu de refs/tags/tag1.


Si vous voulez que cela se produise automatiquement, vous pouvez changer votre .git/config pour lister plusieurs refspecs pour la récupération, par exemple:

 [remote "origin"]
      url = whoever@whereever:whatever.git
      fetch = +refs/heads/*:refs/remotes/origin/*
      fetch = +refs/tags/*:refs/tags/origin/*

... ce qui est suggéré dans Pro Git .

28
répondu Mark Longair 2014-01-17 15:22:05

Une balise n'est pas "locale" ou "distante": elle est associée à un commit, qui peut faire partie de plusieurs branches, y compris celles de l'espace de noms des télécommandes.

Récupère la balise SHA1 du commit référencé par une balise

git show -s 'TAG_NAME^{commit}' --format='%H'

, et faire un :

git branch -a --contains SHA1

Si vous voyez

 remotes/aRemoteRepoName/aBranch

Vous savez que la balise fait référence à un commit que vous avez récupéré à partir d'un repo distant.

Comme Chris mentionne:

git branch -a --contains TAGNAME

Déréférencera la balise et donnera la réponse en une seule fois.

10
répondu VonC 2017-05-23 11:51:45