在Windows中使用diff/patch,又称"无法找到要在输入行4处修补的文件"

Joh*_*kel 4 cvs diff patch windows-7

我正在使用CVS和win7.我需要将一些更改从主干复制到分支,所以我想我可以使用"diff -ruN"将更改放入文件中,然后使用"patch -i"将它们应用到分支.

所以我看到了这个页面这个页面.我已经有了cygwin diff,所以我在这里得到了gnu补丁.我做了两个文件

\test\mydir1\afile.txt
\test\mydir2\afile.txt
Run Code Online (Sandbox Code Playgroud)

有微小的差异.然后我输入

cd test
diff -ruN mydir1 mydir2 >test.patch
patch --dry-run -i test.patch
Run Code Online (Sandbox Code Playgroud)

结果是

can't find file to patch at input line 4
Perhaps you should have used the -p or --strip option?
Run Code Online (Sandbox Code Playgroud)

所以我试过了

patch --dry-run --verbose -p1 -i test.patch
Run Code Online (Sandbox Code Playgroud)

我得到了同样的错误.很长一段时间我尝试了很多其他的事情,没有成功.为什么这么难?

Joh*_*kel 12

好的,这是我需要知道的两件事,但没有记录在任何地方

  • diff输出使用unix格式,但patch需要dos格式
  • 补丁中的默认"条带"不是您所期望的-p0.它是-p1.

这有效......

diff -ruN mydir1 mydir2 | unix2dos > test.patch
patch -p0 -i test.patch
Run Code Online (Sandbox Code Playgroud)

您必须转换为DOS行结尾,并且必须指定-p0.否则默认为-p1.我希望这会帮助别人.