如何使svn diff生成补丁将应用的文件,当使用svn cp或svn mv时?

该场景是:

  1. svn cp或mv某个文件
  2. 修改该文件
  3. svn diff> mypatch

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

  1. 尝试应用mypatch。
  2. 失败 – >尝试修改不相关的文件。

我怎样才能让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步中的不完整的变化是一个问题,因为你可以只添加更多的更改和更新