Если в удаленном репозитории есть теги, я обычно получаю их автоматически при нажатии. Когда я удалю созданный локальный тег (git tag -d <tag-name>
) и вытащу, удаленный тег будет воссоздан. Я могу удалить удаленные ветки/теги (git push <remote-branch/tag-name>:<branch/tag-name>
), но как я могу обнаружить, что локальный тег был создан, извлекая удаленный тег?
Git: различать локальные и удаленные теги
Ответ 1
Если вас раздражают эти воссозданные теги при запуске git pull
, вы отключите выборку тегов по умолчанию с помощью remote. < remote-name > . 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
, чтобы перечислить несколько refspec для извлечения, например:
[remote "origin"]
url = [email protected]:whatever.git
fetch = +refs/heads/*:refs/remotes/origin/*
fetch = +refs/tags/*:refs/tags/origin/*
... который предлагается в Pro Git.
Ответ 2
тег не является "локальным" или "remote": он связан с фиксацией, которая может быть частью нескольких ветвей, в том числе и в пространстве имен удаленных объектов.
Получить тег SHA1 коммита, на который ссылается тег
git show -s 'TAG_NAME^{commit}' --format='%H'
и выполните:
git branch -a --contains SHA1
Если вы видите
remotes/aRemoteRepoName/aBranch
вы знаете, что тег ссылается на фиксацию, полученную вами из удаленного репо.
Как Chris упоминает:
git branch -a --contains TAGNAME
будет разыменовывать тег и дает ответ за один раз.