我正在尝试使用配方described in this question拆分git repo,但是有问题的git repo很庞大并且有数千次提交,所以当我尝试按照描述运行命令时,命令行限制就会启动提交过滤器失败。如果我尝试分阶段(首先应用索引过滤器,然后提交过滤器),索引过滤器工作正常,但提交过滤器卡住并开始使用大量内存(3G +),所以我必须杀死它。知道怎么做吗?也许我在这里做错了什么?
对于那些没有阅读其他问题的人来说,任务是将一些目录从一个非常大的git repo拆分成另一个repo,同时保留与这些目录相关的历史记录。
答案 0 :(得分:4)
我认为自从我写下这个答案以来已经添加了这个:
--prune-empty
某种过滤器会生成空提交,这会使树保持不变。此开关允许git-filter-branch忽略此类提交。虽然,这个开关只适用于只有一个父节点的提交,但它会保留合并点。此外,此选项与--commit-filter的使用不兼容。虽然你只需要在你的提交过滤器中使用函数git_commit_non_empty_tree“$ @”而不是git commit-tree“$ @”idiom来实现这一点。
所以试试git filter-branch --index-filter '...' --prune-empty
,因为它只是我的另一个答案中的提交过滤器给你带来了问题。