我在我的服务器上有一些我想要修补的文件,所以我拿了一个文件来testing:
cp /path/file ~/file
所以现在我在根目录中只有相同的文件,所以我在〜/ file上的文件上做了任何更改,现在我在2个文件上运行diff命令:
diff -Nuar /path/file ~/file > my_file.patch
我也试过了:
diff -u /path/file ~/file > my_file.patch diff -c /path/file ~/file > my_file.patch diff /path/file ~/file > my_file.patch
现在你可以看到,除了我刚刚修改的文件之外,没有任何区别,但是不用创buildmy_file.patch而只用代码修改我在/ path / file中所做的修改,它总是创build一个完整的文件所有标记为要删除的/ path / file的内容以及要添加的标记为〜/ file的内容。
然后我尝试应用该补丁:
patch -p0 < ~/my_file.patch
而且它不好用…它总是打印出一个与文件一样的所有内容的拒绝文件。
我为什么一直在做这个想法,有几个文件我可以生成一个没有问题的补丁,但是系统上的大部分文件,我需要做一个它不会工作。
任何想法可能是什么问题? 编码,格式? 解决scheme
有些文件可能有Windows(DOS)行尾而不是Unix新行? 尝试运行dos2unix之前做diff 。
dos2unix和fromdos (在我的系统上,前者是后者的符号链接)在命令行上接受文件名并进行转换。 您可以使用-b选项进行备份。 如果在各种目录中有很多这些文件,则可以使用find来处理它们。
find /dir/to/start -type f -name "foo*" -exec fromdos -b {} +
然后当你满意的时候一切顺利:
find /dir/to/start -type f -name "foo*.bak" -delete
删除备份。
patch对当前目录和-p选项非常敏感。 你确定你正在试图从正确的位置应用补丁吗? 你是否指定了一个适合你的补丁文件内容的前缀(通过-p )?