分裂巨大的git repo

时间:2011-02-02 23:51:05

标签: git git-filter-branch

我正在尝试使用配方described in this question拆分git repo,但是有问题的git repo很庞大并且有数千次提交,所以当我尝试按照描述运行命令时,命令行限制就会启动提交过滤器失败。如果我尝试分阶段(首先应用索引过滤器,然后提交过滤器),索引过滤器工作正常,但提交过滤器卡住并开始使用大量内存(3G +),所以我必须杀死它。知道怎么做吗?也许我在这里做错了什么?

对于那些没有阅读其他问题的人来说,任务是将一些目录从一个非常大的git repo拆分成另一个repo,同时保留与这些目录相关的历史记录。

1 个答案:

答案 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,因为它只是我的另一个答案中的提交过滤器给你带来了问题。