我的git存储库中有一些不再重要的旧标签。我想存档标签,以便在运行git标签时默认显示它们。我不想删除它们,因为我想保留历史记录。我怎么能这样做?
答案 0 :(得分:3)
可以将标签保留在仓库中,避免将其列为标签。它还可以避免默认克隆获取它们。
在原产地(裸仓库),假设您要存档以' 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
答案 1 :(得分:1)
克隆回购,将标记保留在备份中,然后将其从您正在使用的标记中删除。
(请注意@AndrewC在对该问题的评论中写下了这个答案,但这可以作为问题的答案。)
答案 2 :(得分:0)
删除标签时应该小心。也许标签是对某些sommit的唯一引用。
branch
|
V
o---o---o----o---o---o
\
o---o---o---o
^
|
someTag
如果删除对提交的最后一个引用,那么有一天你将失去提交。有一天意味着只要git gc
收集它们。
如果您没有遇到此问题,可以使用
$ git show-ref --tags > tag_refs-20141126.txt
将标记和提交ID转储到文件中。然后将此文件提交到您的存储库或将其保存在其他位置。在此之后,您可以删除标签
$ 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