如何在Linux上应用windows SVN制作的差异?

sso*_*zak 9 linux svn windows diff patch

在Windows上我创建了一个多文件差异:

svn diff > mydiff.diff
Run Code Online (Sandbox Code Playgroud)

然后将其移动到linux机器(使用相同版本的相同repo,没有更改).我怎么用它?执行后

 patch -p0 < mydiff.diff
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

patching file licstat/test/unittest/test_licstatactioncontainers.cpp
File licstat/test/unittest/test_licstatactioncontainers.cpp is not empty after patch, as expected
patching file licstat/test/unittest/test_licstatactions.cpp
Hunk #1 FAILED at 99.
1 out of 1 hunk FAILED -- saving rejects to file licstat/test/unittest/test_licstatactions.cpp.rej
can't find file to patch at input line 295
Perhaps you used the wrong -p or --strip option?
The text leading up to this was:
--------------------------
|Index: licstat/test/unittest/test_licenseserverusagemap.cpp
|===================================================================
|--- licstat/test/unittest/test_licenseserverusagemap.cpp       (revision 6767)
|+++ licstat/test/unittest/test_licenseserverusagemap.cpp       (working copy)
--------------------------
File to patch: 
Run Code Online (Sandbox Code Playgroud)

最后一行是等待我的行动.

我应该如何创建/应用补丁以使其工作?

(编辑)现在我看到,文件丢失了,差异没有创建它.手动创建文件后,我得到这样的错误:

patching file licstat/misc/generic/mysql/stored_procedures.sql
Hunk #1 FAILED at 220.
Hunk #2 FAILED at 245.
Hunk #3 FAILED at 622.
Hunk #4 FAILED at 661.
Hunk #5 FAILED at 810.
Hunk #6 FAILED at 822.
Hunk #7 FAILED at 868.
Hunk #8 FAILED at 999.
8 out of 8 hunks FAILED -- saving rejects to file licstat/misc/generic/mysql/stored_procedures.sql.rej
Run Code Online (Sandbox Code Playgroud)

Ser*_*lin 7

如果在Linux上的文件中有CR + LF换行符,则使用"dos2unix"将无济于事.

此命令应该使用换行符的任意组合来完成工作:

patch -p0 -l --binary < patch.diff
Run Code Online (Sandbox Code Playgroud)


Joh*_*don 0

当您在 Unix 系统上时,当本地文件格式为 CRLF 而不是 LF 时,可能会发生此类错误。

patch 尝试使 svn diff 补丁适应 unix 文件格式,但当本地文件处于 dos 模式时会出错,当您在 dos 和 unix 环境之间共享代码库时可能会发生这种情况。

对我有用的是首先转换所有受影响的文件,例如:

grep ^+++ patchfile.patch | awk '{print $2}' | dos2unix
Run Code Online (Sandbox Code Playgroud)

然后应用补丁:

patch -p0 < patchfile.patch
Run Code Online (Sandbox Code Playgroud)