当前位置:  开发笔记 > 开发工具 > 正文

当使用svn cp或svn mv时,如何使svn diff产生补丁适用的文件?

如何解决《当使用svncp或svnmv时,如何使svndiff产生补丁适用的文件?》经验,为你挑选了3个好方法。

场景是:

    svn cp或mv一些文件

    修改该文件

    svn diff> mypatch

在其他机器上(相同的工作副本,但没有更改):

    尝试应用mypatch.

    失败 - >尝试修改不存在的文件.

在这种情况下,如何让svn diff生成补丁应用补丁,或干净地应用svn diff生成的补丁?我无法承诺.我想保留mergeinfo(因为明显的解决方法是将文件添加为全新文件,而不连接到前一个文件).



1> Ray..:

使用subversion,您可以指定要使用的diff二进制文件以及要传递给它的参数.请参阅svn diff上的手册.

你想从svn diff生成一个常规的补丁文件,所以你希望svn diff看起来像普通的diff.试试这个:

svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch
...
patch -p0 < mypatch

概念证明:

echo "newline" >> README.txt
svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch
cp README.txt README.txt.patched
svn revert README.txt
patch -p0 < mypatch
diff README.txt README.txt.patched

修补后两个文件没有区别.


这不适合我.生成的补丁文件仍然将复制的文件显示为原始文件的修改(例如,它的行以 - 开头,以及不以 - 或+开头的行).此外,尝试修补产生:"14个英雄中的12个失败 - 保存拒绝归档".您是否尝试使用实际包含内容的源文件以及内容与源文件不同的目标文件?
如果分支之间存在属性更改,则此方法无效.
按照OP的步骤(svn mv,修改新文件)以及用于差异和修补的命令,我得到与OP所述相同的结果 - 补丁抱怨新文件不存在,因此它不知道要修补什么.

2> Apteryx..:

如果你想在补丁中删除svn属性,还有一个选项:

svn diff --patch-compatible > mypatch.diff

svn help diff 说:

  --patch-compatible   : generate diff suitable for generic third-party
                         patch tools; currently the same as
                         --show-copies-as-adds --ignore-properties

以这种方式创建的补丁应该与良好的旧朴素patch实用程序兼容.


这比预期的结果更接近于更多选票的答案.这个实际上从已移动的文件中删除了内容,并为新文件添加了正确的修改.但是它将原始文件显示为简单修改且没有内容,并将新文件显示为无版本文件.不过,这是我到目前为止看到的原始问题的最佳答案.

3> Adrian Pronk..:

您是否尝试过svn diff网页上--show-copies-as-adds提到的选项并在svn选项页面上进行了描述?

推荐阅读
Chloemw
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有