差异总是不能应用我所做的补丁文件?

我在我的服务器上有一些我想要修补的文件,所以我拿了一个文件来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

dos2unixfromdos (在我的系统上,前者是后者的符号链接)在命令行上接受文件名并进行转换。 您可以使用-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 )?