为什么修补程序拒绝SVN工作副本上的修补程序文件?
我有这样一个补丁文件:为什么修补程序拒绝SVN工作副本上的修补程序文件?,svn,patch,Svn,Patch,我有这样一个补丁文件: Index: dir/file.xml =================================================================== --- dir/file.xml (revision 178) +++ dir/file.xml (working copy) @@ -7,7 +7,7 @@ <markup> - <markup /> + <markup></m
Index: dir/file.xml
===================================================================
--- dir/file.xml (revision 178)
+++ dir/file.xml (working copy)
@@ -7,7 +7,7 @@
<markup>
- <markup />
+ <markup></markup>
<markup>
<markup>
@@ -20,6 +20,7 @@
<markup>
<markup>
+ <tag>
<markup>
然后我试着
$ cd branches/mybranch
$ ls -R
./dir:
file.xml
$ patch -p0 -i ~/patchfile.patch
但是SVN的输出是
(Stripping trailing CRs from patch.)
patching file dir/file.xml
Hunk #1 FAILED at 7.
Hunk #2 FAILED at 20.
2 out of 2 hunks FAILED -- saving rejects to file dir/file.xml.rej
每个文件
什么会导致SVN拒绝该修补程序?我在UNIX计算机上,但修补程序和存储库有Windows行结尾
谢谢你的帮助 您可以在补丁文件上尝试dos2unix工具。这将转换行尾。编辑: 因此,我们确定
patch
不是SVN工具。SVN对此没有任何直接影响,除非它错误地创建了补丁文件
您确定修补程序文件是从主干创建的吗?如果是这样的话,您的副本应该与修补程序所基于的副本相同,因此没有理由失败。我能想到的唯一结论是补丁文件有问题;它与您的文件不匹配
确认工作副本中的dir/file.xml确实包含
<markup>
<markup />
<markup>
<markup>
从7号线开始。(我假设你问题中的代码只是一个经过编辑的副本,因为那里应该有7行,而不是4行。)也就是说,文件的内容与补丁的内容匹配吗?特别注意间距和行尾。如果是这样的话,那么就没有理由解释为什么补丁会让那个大块头失败。dos2unix的
技巧不错,但没有像建议的那样解决问题
我实际修补了所有文件:
$ cd branches/mybranch
$ sudo apt-get install tofrodos
$ fromdos ~/patchfile.patch
$ fromdos */*
$ patch -p0 -i ~/patchfile.patch
$ todos */*
所以基本上,patch
似乎在Unix下处理CR/LF
行时有问题。将其转换为LF
,然后进行修补并在修补后将其转换回
感谢Stefan。这样做了。现在它不再说“(从补丁中剥离后续CRs)。”。错误仍然存在。@Stefan dos2unix使修补正常。但结果没有出现断线。在我的ex示例中,该文件包含:CatdogCow这不是问题所在的补丁文件,而是源文件谢谢你,Zac。但我知道补丁不是subversion的一部分。经过一些尝试,我也遇到了这个文件夹问题。我应该说,dir
实际上在我的分支中。尝试patch-p[N]
时确实返回了类似file not found
或类似的错误。看看我的编辑。谢谢这也解决了我的问题,谢谢。实际上,补丁似乎不能很好地处理CRLF,即使是在补丁和待补丁文件中。如果两个补丁文件和待补丁文件都遵循相同的行尾(即CRLF/LF),补丁对我来说使用CRLF效果很好
$ cd branches/mybranch
$ sudo apt-get install tofrodos
$ fromdos ~/patchfile.patch
$ fromdos */*
$ patch -p0 -i ~/patchfile.patch
$ todos */*