Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么修补程序拒绝SVN工作副本上的修补程序文件?_Svn_Patch - Fatal编程技术网

为什么修补程序拒绝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 */*