我的典型工作流程如下:
[work@remoteLinuxBox:~/work] patch -p0 -i ~/work/fix.patch (Stripping trailing CRs from patch.) patching file src/java/main/myApp/view/action/test/launch/GetPeekAction.java Hunk #1 FAILED at 385. 1 out of 1 hunk FAILED -- saving rejects to file src/java/main/myApp/view/action/test/launch/GetPeekAction.java.rej (Stripping trailing CRs from patch.) patching file src/java/main/myApp/view/action/test/GetAllCustomerAction.java Hunk #1 FAILED at 76. 1 out of 1 hunk FAILED -- saving rejects to file src/java/main/myApp/view/action/test/GetAllCustomerAction.java.rej (Stripping trailing CRs from patch.)
但我总是遇到这样的错误。我认为这是由于Windows和Linux上的行尾不同的原因造成的,因此我使用dos2unix转换了补丁,警告(如从补丁中删除尾随CR)消失了,但补丁仍然失败。
有一种奇怪的行为,如果文件的修改仅发生在现有行上,则应用补丁将起作用。但是如果添加了新行,则补丁会失败。
任何人都知道如何解决这个问题?非常感谢
答案 0 :(得分:4)
使用cygwin svn diff来避免头痛,将确保每个hunk的头部只有LF作为行结束而不是CR + LF。 Linux patch命令不适用于具有CR + LF行结尾的hunk头。 对我来说TortoiseSVN / create patch是破坏的,因为它创建的补丁不是跨平台的。
答案 1 :(得分:3)
我遇到了类似的问题,我认为不仅补丁文件的行分隔符很重要,而且你的工作副本也很重要。
我的工作副本有Windows Line Endings(CR + LF),但在我将受影响的文件(在工作副本中)转换为Unix Line Endings之后,补丁工作了!问题是,现在我的文件比较工具显示工作副本文件与每一行中的存储库不同 - 因为行结尾不同。我想,如果Windows可以处理它们,我最终会将整个存储库转换为Unix行结尾。
希望它有所帮助。
答案 2 :(得分:2)
您可以尝试将“-l --binary”添加到修补命令中,如下所示:
patch -p0 -l --binary < patch.diff