我正在尝试使用两个大型文件夹(~7GB)创建一个补丁。
这是我的做法:
$ diff -Naurbw . ../other-folder > file.patch
但可能由于文件大小的原因,没有创建补丁并给出错误:
diff: memory exhausted
我尝试使空间超过 15 GB,但问题仍然存在。有人可以帮我解决我应该使用的标志吗?
我正在尝试使用两个大型文件夹(~7GB)创建一个补丁。
这是我的做法:
$ diff -Naurbw . ../other-folder > file.patch
但可能由于文件大小的原因,没有创建补丁并给出错误:
diff: memory exhausted
我尝试使空间超过 15 GB,但问题仍然存在。有人可以帮我解决我应该使用的标志吗?
最近,当我需要区分两个大文件(每个文件 > 5Gb)时,我也遇到了这个问题。
我尝试使用具有不同选项的“差异”,但即使--speed-large-files
没有效果。其他方法(例如将文件拆分为较小的xdelta
文件、按照此建议使用或排序文件)也无济于事。我什至得到了一个非常强大的虚拟机(> 72Gb RAM),但仍然出现此memory exhausted
错误。
我终于通过在sysctl.conf
( sudo vim /etc/sysctl.conf
) 中添加以下参数来开始工作:
vm.overcommit_memory=1
vm.overcommit_memory
具有三个值(0,1,2)并设置内核虚拟内存记帐模式。从proc(5) 手册页:
0:启发式过度使用(这是默认设置)
1:总是过度使用,从不检查
2:总是检查,从不过度使用
为确保确实应用了该参数,您可以运行
sudo sysctl -p
完成后不要忘记将这个参数改回来!
bsdiff
速度慢且需要大内存,xdelta
为大文件创建大增量。
为大文件尝试 HDiffPatch:https ://github.com/sisong/HDiffPatch
使用示例:
hdiffz -s-256 [-c-lzma2] old_path new_path out_delta_file
hpatchz old_path delta_file out_new_path
试试sdiff
。它是某些 Linux 发行版中的预构建工具。
sdiff a.txt b.txt --output=c.txt
将显示要修改的文件。
这对我来说非常有效。