如何归档旧的git标签?

时间:2014-11-26 20:45:44

标签: git

我的git存储库中有一些不再重要的旧标签。我想存档标签,以便在运行git标签时默认显示它们。我不想删除它们,因为我想保留历史记录。我怎么能这样做?

3 个答案:

答案 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