【问题标题】:How to apply diff made by windows SVN on linux?如何在linux上应用windows SVN制作的差异?
【发布时间】:2011-03-10 23:54:52
【问题描述】:

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

svn diff > mydiff.diff

然后将其移至 linux 机器(使用相同版本的相同 repo,没有更改)。我如何应用它?执行后

 patch -p0 < mydiff.diff

我得到以下输出:

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: 

最后一行提示等待我的操作。

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

(edit) 现在我看到了,文件丢失了,而 diff 没有创建它。手动创建文件后,我收到如下错误:

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

【问题讨论】:

    标签: windows linux svn diff patch


    【解决方案1】:

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

    这个命令应该使用任何换行符组合来完成这项工作:

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

    【讨论】:

      【解决方案2】:

      我经常在 windows 和 mac 系统之间修补文件,patch 似乎可以正确处理换行符,所以我认为这不是问题。看起来你可能已经删除了test_licstatactioncontainers.cpp,第一个警告就是关于这个的。第二个似乎在抱怨找不到文件本身。

      这可能是文件名大小写问题吗? Windows 对文件名大小写不敏感,但 linux 不是。该文件实际上是否在 Linux 上称为 Test_LicenceServerUsageMap.cpp?还是目录 LicStat/Test ?

      【讨论】:

      • 是的,我删除了文件(使用 svn),所以应该没问题。不,所有目录/文件名都是小写的。
      【解决方案3】:

      尝试使用dos2unix 命令将补丁文件中的行尾从 DOS 转换为 Unix。

      【讨论】:

      • 如果底层文件有混合行结尾,这将不起作用。
      【解决方案4】:

      当您在 unix 系统上本地文件格式是 CRLF 而不是 LF 时,可能会发生这种类型的错误。

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

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

      grep ^+++ patchfile.patch | awk '{print $2}' | dos2unix
      

      然后应用补丁:

      patch -p0 < patchfile.patch
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 2015-04-17
        • 2018-01-14
        • 1970-01-01
        • 2013-11-05
        相关资源
        最近更新 更多