Git: la distinction entre le local et le distant tags
Si il y a des balises dans le dépôt distant, j'ai l'habitude de les obtenir automatiquement lorsque vous tirez. Quand je supprime le local créé tag (git tag -d <tag-name>
) et le pull, la balise supprimée sera recréé. Je peux effacer à distance les branches/tags (git push <remote-branch/tag-name>:<branch/tag-name>
), mais comment puis-je détecter que le tag a été créé par l'extraction d'un point distant?
- Si vous êtes dans un lieu convivial, les balises serait annotaed, et de celles que vous avez récupéré d'ailleurs généralement y a des auteurs qui ne sont pas vous.
Vous devez vous connecter pour publier un commentaire.
Si vous êtes gêné à propos de ces balises être recréé lorsque vous exécutez
git pull
, vous pouvez désactiver le chargement des balises par défaut avec le à distance.<distance-name>.tagopt paramètre de configuration. par exemple, si la distance estorigin
, alors vous pouvez faire:Mise à jour: à l'adresse de votre commentaire, la raison que je suggère c'est qu'il n'y a pas un moyen évident de faire la différence entre un tag qui a été créé localement et celui qui a été récupéré à partir d'une télécommande. Il ya aussi pas de
reflog
pour les balises. Donc, ma suggestion est de supprimer la récupération automatique de balises vous pouvez ensuite aller chercher vous-même dans un espace de noms différent. Par exemple, vous pourriez faire:... et peut-être créer un alias pour que. Ensuite, lorsque vous souhaitez chercher des balises, ils vont être nommé, par exemple,
refs/tags/origin/tag1
au lieu derefs/tags/tag1
.Si vous voulez que cela se produise automatiquement, vous pouvez changer votre
.git/config
à la liste de plusieurs refspecs pour l'extraction, par exemple:... qui est proposé en Pro Git.
git tag -l | xargs git tag -d
pour supprimer toutes les balises, suivie pargit fetch origin +refs/tags/*:refs/tags/*
(sansorigin/
) a travaillé pour moi pour restaurer l'état d'origine (j'ai voulu supprimer les balises, j'ai ajouté localement).une balise n'est pas "local" ou "à distance": il est associé à un commit, dont une partie des multiples branches, y compris ceux dans les télécommandes de l'espace de noms.
Obtenir balise SHA1 du commit référencé par une balise
et de faire un :
Si vous voyez
vous savez que la balise de référence d'un commit, vous avez récupéré à partir d'une distance repo.
Comme Chris mentionne:
sera de déréférencement de la balise et donne la réponse en une seule fois.
git branch -a --contains 'TAG_NAME^{commit}
?--contains
automatiquement déréférencement de l'objet nommé, donc il n'est pas nécessaire de spécifier manuellement le déréférencement soit. Simplementgit branch -a --contains TAG_NAME
fonctionne comme prévu.