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