2010-09-18 25 views
4

我的典型的工作过程是这样的:始终无法远程Linux机器上应用SVN补丁

  1. 退房从主干代码到我的窗口工作机
  2. 做一些修改(但没有提交SVN )并使用Tortoise SVN的“创建补丁”创建这些修改的补丁。
  3. SSH登录到远程Linux服务器,并上传修补程序。 linux服务器也检出了主干头。
  4. 应用补丁的Linux服务器上,如:
 
[[email protected]:~/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

你有没有使用rsync考虑(见例如http://en.wikipedia.org/wiki/ Rsync#Windows)呢? – 2010-09-18 11:22:23

+0

为什么不使用svn通过http与远程服务器通信的能力? – JoelFan 2010-12-17 11:30:29

回答

3

我有一个类似的问题,我认为不仅修补程序文件的行分隔符是重要的,而且还有你的工作副本。

我的工作副本有Windows线结局(CR + LF),但在将受影响的文件(在工作副本中)转换为Unix线结束后,该修补程序工作!问题是,现在我的文件比较工具显示工作副本文件与每一行中的存储库不同 - 因为不同的行尾。我想,如果Windows可以处理它们,我将最终将整个存储库转换为Unix行结束符。

希望它有帮助。

4

使用cygwin svn diff避免头痛,将确保每个人的头部只有LF作为行结束而不是CR + LF。 Linux修补程序命令不适用于具有CR + LF行结尾的大块头。 对我而言,TortoiseSVN /创建补丁已损坏,因为它创建的补丁不是跨平台的。

2

你可以尝试添加“-l --binary”的修补命令,就像这样:

patch -p0 -l --binary < patch.diff 
+0

太晚了!该补丁由于工作副本中创建时的文件上的错误行尾而搞砸了。你不能把它拧下来。 – reinierpost 2015-10-13 12:58:37