Git: различать локальные и удаленные теги - PullRequest
24 голосов
/ 31 марта 2011

Если в удаленном репозитории есть теги, я обычно получаю их автоматически при извлечении. Когда я удаляю созданный локальный тег (git tag -d <tag-name>) и тяну, удаленный тег будет воссоздан. Я могу удалить удаленные ветки / теги (git push <remote-branch/tag-name>:<branch/tag-name>), но как мне обнаружить, что локальный тег был создан путем извлечения удаленного тега ?

Ответы [ 2 ]

28 голосов
/ 31 марта 2011

Если вас раздражает, что эти теги воссоздаются при запуске git pull, вы по умолчанию отключаете выборку тегов с помощью параметра конфигурации remote. .tagopt . например если дистанционное управление origin, то вы можете сделать:

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

Обновление: для ответа на ваш комментарий. Причина, по которой я предлагаю это, заключается в том, что нет очевидного способа определить разницу между тегом, созданным локально, и тегом, полученным с удаленного компьютера. Там также нет reflog для тегов. Поэтому я предлагаю отключить автоматическую выборку тегов - вы можете сами извлечь их в другое пространство имен. Например, вы можете сделать:

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

... и, возможно, создайте для этого псевдоним. Затем, когда вы захотите получить теги, они будут названы, например, refs/tags/origin/tag1 вместо refs/tags/tag1.


Если вы хотите, чтобы это происходило автоматически, вы можете изменить свой .git/config, чтобы он отображал несколько ссылок для извлечения, например ::

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

... что предлагается в Pro Git .

10 голосов
/ 31 марта 2011

тег не является «локальным» или «удаленным»: он связан с коммитом, который может входить в несколько веток, в том числе в пространстве имен удаленных устройств.

Получить тег SHA1 из коммита, на который ссылаетсяпо тегу

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

и выполните:

git branch -a --contains SHA1

Если вы видите

 remotes/aRemoteRepoName/aBranch

, вы знаете, что тег ссылается на коммит, который вы извлекли изудаленное репо.

Как Крис упоминает:

git branch -a --contains TAGNAME

разыменует тег и дает ответ за один раз.

...