我如何归档旧的git标签并将更改推向原点



我想摆脱一些旧标签。但是我不想删除它们,我只想归档它们,以便在必要时可以还原它们。

我指的是一个微笑问题的答案:我如何存档旧的git标签?

我创建了一个新文件夹参考/存档/标签,并将所有受影响的标签移至该文件夹。

假设我不能直接进行更改,而必须在我的本地存储库中进行。那我该如何推动更改?我正在使用以下命令: git推出refs/tags/:refs/tags/ refs/archive/tags/:refs/archive/tags/

并收到以下反馈: 一切最新我的同事可以获取存档文件夹,但旧标签仍保留在Ref/Tag下。我在做什么错?

标签,除非他删除它们,否则不会从您的同事的回购中删除。就像您不能先删除标签的情况下无法更改标签一样。另一个选项是将您的存储库克隆到新目录。

删除所有本地标签:

for x in `git tag`; do
git tag -d $x
done
git remote update

最后,我使用以下脚本。它存档所有未命名为"测试"的标签。然后,直接在原点上删除目录" refs/archive/tags"目录中的所有标签。推动存档目录,删除所有本地标签,然后从Origin获取标签。也许有更简单的解决方案,但是这个解决方案对我有用。

mkdir refs/archive/tags
shopt -s extglob
mv refs/tags/!(test) refs/archive/tags/
ls refs/archive/tags/ | xargs -n 1 -I% git push origin :refs/tags/%
git push origin refs/archive/tags/*:refs/archive/tags/*
git tag -l | xargs git tag -d
git fetch origin +refs/tags/*:refs/tags/*

我的同事必须使用以下脚本:

git tag -l | xargs git tag -d
git fetch origin +refs/archive/*:refs/archive/* +refs/tags/*:refs/tags/*

如果必要:

还原所有标签
mv refs/archive/tags/* refs/tags/
git push origin --tags