Windows 7 在windows中使用diff/patch,又名;can';t在输入行4“找到要修补的文件”;

Windows 7 在windows中使用diff/patch,又名;can';t在输入行4“找到要修补的文件”;,windows-7,diff,cvs,patch,Windows 7,Diff,Cvs,Patch,我正在使用CVS和win7。我需要将一些更改从主干复制到分支,所以我想我可以使用“diff-ruN”将更改放入文件,然后使用“patch-I”将它们应用到分支 所以我看到了,而且。我已经有了cygwin diff,所以我得到了gnu补丁。我做了两份文件 \test\mydir1\afile.txt \test\mydir2\afile.txt 它们有细微的区别。然后我打字 cd test diff -ruN mydir1 mydir2 >test.patch patch --dry-ru

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

所以我看到了,而且。我已经有了cygwin diff,所以我得到了gnu补丁。我做了两份文件

\test\mydir1\afile.txt
\test\mydir2\afile.txt
它们有细微的区别。然后我打字

cd test
diff -ruN mydir1 mydir2 >test.patch
patch --dry-run -i test.patch
结果是

can't find file to patch at input line 4
Perhaps you should have used the -p or --strip option?
所以我试过了

patch --dry-run --verbose -p1 -i test.patch

我得到了同样的错误。我尝试了很多其他的东西很长一段时间都没有成功。为什么这么难

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

  • diff输出使用unix格式,但修补程序需要dos格式
  • 补丁中的默认“strip”不像您预期的那样是-p0。它是-p1
这很有效

diff -ruN mydir1 mydir2 | unix2dos > test.patch
patch -p0 -i test.patch

您必须转换为DOS行尾,并且必须指定-p0。否则,默认值为-p1。我希望这能帮助其他人。

我已经了解了更多关于CVS的知识,所以我不再使用补丁了。如果要将特定更改从一个CVS分支复制到另一个,可以使用。例如,假设将头部的file1.cpp从1.45更改为1.46。您可以导航到分支并键入

cvs update -kk -j 1.45 -j 1.46 file1.cpp
并且它会将指定的更改从头复制到分支

如果要复制多个文件中的更改,可以使用cvs rtag基于日期(etc)创建标记,然后在更新中使用标记,例如

cvs update -kk -j tagBeforeChange -j tagAfterChange

非常感谢你为我提供这个答案!它就像我的魅力:)我还期待着-p0成为默认值。手动指定它修复了我的问题。谢谢