我正在使用git filter-branch --tree-filter
重写一个相当大的回购的历史,这需要几个小时。我看到git正在使用一个临时目录来存储它的中间工作。这是否意味着如果它被中断,可以重新开始重写?如果是这样,怎么样?
修改
我正在做的操作是移动几个目录。这些目前在子目录中,但我现在需要它们在根目录中。
e.g。
dir1
- dir2
- dir3
- dir4
变为
dir1
- dir2
dir3
dir4
当然,我的目录结构比这复杂得多,但这是我要做的事情的要点。
答案 0 :(得分:14)
git filter-branch
本身不支持暂停/恢复使用模式 - 虽然它将临时数据写入.git-rewrite
文件夹,但实际上并不支持根据此目录的内容进行恢复。如果您在先前已中止git filter-branch
操作的存储库上运行filter-branch
,它将要求您删除该临时文件夹,或者使用--force
选项{{3} }。
潜在的问题是git-filter-branch
在大回购上运行缓慢 - 如果流程快得多,就没有动力尝试恢复。所以你有几个选择:
git-filter-branch
非常耗费IO,并且在您的存储库位于RAM中时运行速度会更快。--index-filter
而不是--tree-filter
- 它类似于树过滤器,但不会检出文件树,这会让它更快,但 要求你根据git索引命令重写文件更改。git-filter-branch
本身是单线程的) cloud computing是git-filter-branch
的一种更简单,更快捷的替代方案 - 在大型回购广告上BFG Repo-Cleaner更快。这将你的工作需要几个小时才能完成一个只需几分钟的 。
完全披露:我是BFG Repo-Cleaner的作者。
答案 1 :(得分:7)
Roberto在他的回答中提到了这一点,但我想给它一个基准:如果您的git filter-branch
操作需要很长时间才能完成,请考虑使用AWS高内存实例。
我曾经不得不filter-branch
并将35个不同的存储库合并在一起,每个存储库都有两年几十次提交的每日历史记录。我的脚本在25小时内无法在笔记本电脑上完成。它在亚马逊的m2.4xlarge
实例上完成了45分钟。
总费用?
1.64美元 - 低于20盎司苏打水。
BFG听起来像是一个很棒的工具,我鼓励任何经常重写历史的人试一试。但是,如果您只是需要一些工作并且可以轻松访问AWS,filter-branch
非常简单。
在2016年,这甚至更便宜。只是对Spot Advisor感到满意,并发现自己的“群集计算价格为0.30美元/小时。