为什么git-filter-branch没有重写标签?

10

我需要将我的Git仓库拆成两个部分。我使用了这里显示的步骤:从Git仓库中分离(移动)子目录到独立的Git仓库

我使用的命令是:

 git filter-branch --subdirectory-filter ABC HEAD -- --all

看起来一切顺利,我现在的根目录是ABC。

但是,如果我尝试检出在我拆分存储库之前存在的标签:

 git checkout an-old-tagname

它正在重新创建旧的目录结构- 因此作为子目录重新创建ABC,以及XYZ1和XYZ2。

我知道这就是那个时间点上存储库实际看起来的样子 - 但我希望标签只引用ABC部分,好像它们当时是在根目录下的一样。我认为在重写历史时 filter-branch 正在做这件事情,但很明显我没有完全理解它。

如何重写标签,以便我可以回到过去,同时仍然使ABC成为存储库的根目录?

1个回答

20

你需要指定

--tag-name-filter cat

同时重写标签

现在,您可以执行以下操作:

git filter-branch --tag-name-filter cat ...其他过滤选项... -- --tags

其中 ...其他过滤选项... 重复之前应用的过滤器。


1
我无法再次运行--subdirectory-filter,因为原始子目录现在是根目录。有没有办法让它回到一开始就像我运行了--subdirectory-filter ... --tag-name-filter cat -- --tags的状态? - Malcolm Box
不,我希望你可以“再次”运行它,只要你针对标签运行它。记住,标签没有被重写?你在原始帖子中提到了这一点。 - sehe
@MalcolmBox,我微调了你的微调。这样改进了吗? - sehe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接