我有一个像这样的补丁文件:
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>
要将它应用于SVN工作副本,我使用以下方法对其进行分支:
$ svn copy -r 178 trunk/component/dir branches/mybranch
然后我试了
$ 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行结束......
感谢您的帮助!
答案 0 :(得分:8)
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的信任。
答案 1 :(得分:1)
您可以在补丁文件上尝试dos2unix工具。这将转换行结尾。
答案 2 :(得分:-1)
编辑:
所以我们确定patch
不是SVN工具。 SVN对此没有任何直接影响,除非它错误地创建了补丁文件。
你确定补丁文件是从trunk创建的吗?如果是这样,您的副本应该与修补程序所基于的副本相同,因此应该没有理由让它失败。我能想到的唯一结论是补丁文件有问题;它与您的文件不符。
确认工作副本中的dir / file.xml确实包含
<markup>
<markup />
<markup>
<markup>
从第7行开始。(我假设你的问题中的代码只是一个编辑过的副本,因为那里应该有7行,而不是4.)也就是说,文件的内容是否与内容匹配补丁?特别注意间距和线条末端。如果确实如此,则应该没有理由为什么补丁会失败。