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?
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 .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 .
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.