我在git仓库中有一些已经不重要的旧标签。我想将它们存档,这样在运行git tag时它们就不会默认显示出来。我不想删除它们,因为我想保留历史记录。我该怎么做?
我在git仓库中有一些已经不重要的旧标签。我想将它们存档,这样在运行git tag时它们就不会默认显示出来。我不想删除它们,因为我想保留历史记录。我该怎么做?
可以在代码库中保留标签,避免将它们列为标签,并避免默认克隆从获取它们。
在原始版本(裸体代码库)中,假设您想要归档所有以“HIDE”开头的标签:
mkdir refs/archive
mv refs/tags/HIDE* refs/archive/
现在git tag
不再列出这些引用,但它们仍然存在于存储库中。
如果您以后想要将归档的标签拉取到本地克隆,则可以运行以下命令:
git fetch origin +refs/archive/*:refs/archive/*
您现在可以使用以下方式列出它们:
git for-each-ref refs/archive
git show-ref
,您将看到存档引用(或我在答案中提到的for-each版本)。你可以通过强制gc所有内容来验证,参见这个答案有关详细信息 - 但在运行该命令之前请阅读警告。 - Zitrax branch
|
V
o---o---o----o---o---o
\
o---o---o---o
^
|
someTag
git gc
收集它们的时候。$ git show-ref --tags > tag_refs-20141126.txt
$ git for-each-ref --format="%(refname)" refs/tags | cut -c11- | \
while read tag; do git tag -d $tag; done
$ cat tag_refs-20141126.txt | while read commitid tagref; do echo $tagref $commitid; done \
| cut -c11- | while read tagname commitid; do git tag $tagname $commitid; done
编辑
我更喜欢Dan Fabulich或Zitrax的答案。使用隐藏的引用是我也经常做的事情。例如,当我想要备份stash时。我之前写了一个git扩展程序。
克隆存储库,在备份中保留标签,然后从您正在使用的存储库中删除它们。
(请注意@AndrewC在评论中编写了此答案,但它算作问题的答案。)