带标签的Git子目录过滤器

丹尼斯

我正在尝试将一个大型仓库划分为多个较小的仓库。目标是拆分文件夹并在此过程中保留标签。

我试过了:

git filter-branch --prune-empty --subdirectory-filter my-folder develop

正确放置my-folder在新项目的根目录下,并保留了标签。但是,签出标签会导致在新仓库中看到整个旧目录结构。

所以我尝试了:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --branches=develop --tags

这导致开发分支具有旧的目录结构,但是当我签出标签时,我看到子目录已正确过滤到根目录!因此,标签是正确的,但不是develop分支。基本上,它与第一种方法有相反的问题。

我不知道为什么第二种方法不起作用。我真的很感谢任何指示!

编辑:

现在尝试:

git filter-branch --tag-name-filter cat --prune-empty --subdirectory-filter my-folder -- --all

犹豫不决,因为我预计这将花费更长的时间。这确实花费了更长的时间,但大多数情况下都起作用。什么没有奏效?好了,尚未创建文件夹的较旧标签保留在存储库中,并且在签出时包含完整的(非常)旧目录结构。我不得不grep并删除所有这些标签。仓库仍然不像我预期的那么小...

正如我在“可能破坏/重写历史记录的Git命令”中提到的那样,旧的git filter-branch命令正在逐渐被弃用。

使用new git filter-repo,将是:

 git filter-repo --path my-folder/ --to-subdirectory-filter / -- refs develop

然后将该分支推送到新的空Git存储库。

那应该正确移动相关标签。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章