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.