如何使svn diff生成补丁将应用的文件,当使用svn cp或svn mv时?
该场景是:
- svn cp或mv某个文件
- 修改该文件
- svn diff> mypatch
在其他机器上(相同的工作副本,但没有更改):
- 尝试应用mypatch。
- 失败 – >尝试修改不相关的文件。
我怎样才能让svn diff产生可修补的补丁,或者在这种情况下干净地应用由svn diff产生的补丁? 我不能承诺。 我想保留mergeinfo(因为明显的解决方法是添加文件作为全新的,没有连接到前一个)。
通过颠覆,你可以指定使用哪个差异二进制文件,以及传递给它的参数。 请参阅svn diff 手册 。
你会想从svn diff产生一个普通的补丁文件,所以你希望svn diff看起来像一个普通的diff。 尝试这个:
svn diff --diff-cmd /usr/bin/diff -x "-i -b" > mypatch ... patch -p0 < mypatch
概念validation:
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
以这种方式创build的修补程序应该与旧的普通patch
程序实用程序兼容。
你有没有尝试--show-copies-as-adds
选项在svn diff网页上提到,并在svn选项页面描述?
如果不了解具体的情况,您正试图努力确定您为什么要这样做。 我感觉你正试图在一个孤立的环境中进行控制改变,以避免影响其他用户/应用程序。
你能解决这个问题吗?
- 为您的代码更改创build一个分支
- 执行您的复制/移动和分支上的更改
- 让另一方切换到这个新的代码分支,并继续共享这个分支
当你同意使用–reintegrate参数和rm分支将变化合并回主干时?
这将*维护合并信息*确定复制/移动和版本控制的变化*仍隔离其他用户的变化*将防止第2步中的不完整的变化是一个问题,因为你可以只添加更多的更改和更新