场景是:
svn cp或mv一些文件
修改该文件
svn diff> mypatch
在其他机器上(相同的工作副本,但没有更改):
尝试应用mypatch.
失败 - >尝试修改不存在的文件.
在这种情况下,如何让svn diff生成补丁应用补丁,或干净地应用svn diff生成的补丁?我无法承诺.我想保留mergeinfo(因为明显的解决方法是将文件添加为全新文件,而不连接到前一个文件).
使用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
修补后两个文件没有区别.
如果你想在补丁中删除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
实用程序兼容.
您是否尝试过svn diff网页上--show-copies-as-adds
提到的选项并在svn选项页面上进行了描述?