Git: distinguish between local and remote tags

旧时模样 提交于 2019-12-03 05:40:45

问题


If there are tags in the remote repository, I'm usually getting them automatically when pulling. When I delete the created local tag (git tag -d <tag-name>) and pull, the deleted tag will be recreated. I can delete remote branches/tags (git push <remote-branch/tag-name>:<branch/tag-name>), but how can I detect that the local tag was created by fetching a remote tag?


回答1:


If you're annoyed about these tags being recreated when you run git pull, you turn off the fetching of tags by default with the remote.<remote-name>.tagopt config setting. e.g. if the remote is origin, then you can do:

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

Update: to address your comment, the reason that I suggest this is that there's not an obvious way to tell the difference between a tag that was created locally and one that was fetched from a remote. There's also no reflog for tags. So, my suggestion is to suppress automatic fetching of tags - you can then fetch them yourself into a different namespace. For example, you could do:

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

... and perhaps create an alias for that. Then when you want to fetch tags, they'll be named, for example, refs/tags/origin/tag1 instead of refs/tags/tag1.


If you want this to happen automatically, you could change your .git/config to list multiple refspecs for fetching, e.g.:

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

... which is suggested in Pro Git.




回答2:


a tag isn't "local" or "remote": it is associated to a commit, which can part of multiple branches, including ones in the remotes namespace.

Get tag SHA1 of the commit referenced by a tag

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

, and do a :

git branch -a --contains SHA1

If you see

 remotes/aRemoteRepoName/aBranch

you know that tag references a commit you have fetched from a remote repo.

As Chris mentions:

git branch -a --contains TAGNAME

will dereference the tag and gives the answer in one go.



来源:https://stackoverflow.com/questions/5496386/git-distinguish-between-local-and-remote-tags

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!