我们收到了一个大补丁,修改了大约 17000 个文件。其大小为5.2G。应用补丁时git apply -3
,12个小时后还没有完成。
我们将每个文件的补丁分成更小的补丁,然后一一应用它们,这样至少我们可以看到进度。
再次卡在一个文件补丁上,仍然有111M那么大。它修改 HTML 文件。
我们将此文件补丁分成每个块的较小补丁,并获得大约 57000 个块补丁。每个块补丁大约需要 2-3 秒,因此比应用文件补丁需要更多时间。我会尝试将其分成更多块。
有什么方法可以有效地应用这么大的补丁吗?谢谢。
Update:
正如@ti7建议的,我尝试过patch
它解决了问题。
就我而言,我们有两种大补丁。
一种是添加/删除大型二进制文件,并且二进制文件的内容作为文本包含在补丁中。其中一个二进制文件大小为 188M,删除它的补丁大小为 374M。
另一种是修改大文本,有数百万次的删除和插入。其中一个文本文件前70M,后162M。补丁大小为181M,有2388623个插入和426959个删除。
经过一些测试,我认为这里的“大”描述的是插入和删除的数量。
对于二进制补丁,
- git apply -3, 7 秒
- git 应用,6 秒
- 补丁,5 秒
对于文本补丁,
- git apply -3,卡住了,10分钟后还没完成
- git apply,卡住了,10分钟后还没完成
- 补丁,3秒
该二进制文件仅包含 1 处插入和/或 1 处删除。git apply
or patch
可以在几秒钟内完成。一切都可以接受。
文本插入和删除过多。明显地,patch
在这种情况下要好得多。我读了一些帖子patch
并了解到某些版本patch
无法添加/删除/重命名文件。幸运的是,patch
在我的机器上运行良好。
因此,我们将一体化补丁拆分为每个文件的更小的补丁。我们尝试timeout 10s git apply -3 file_patch
第一的。如果无法在 10 秒内完成,请尝试timeout 10s patch -p1 < file_patch
.
最后,大约用了1个半小时,17000个补丁全部贴完。这比打了多合一补丁后 12 小时什么也没做要好得多。
而且我也尝试过patch -p1 < all_in_one_patch
。只用了1分27秒。所以我认为我们可以进一步改进我们的补丁流程。