2008-11-25 78 views
61

的情况是:如何使svn diff生成该补丁适用的文件,当使用svn cp或svn mv时?

  1. SVN CP或MV某些文件
  2. 修改该文件
  3. SVN DIFF> mypatch

在其他机器(同一个工作拷贝,但没有改变):

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

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

回答

63

通过颠覆,您可以指定要使用的差异二进制文件以及传递给它的参数。请参阅svn diff上的the manual

你会想从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 

修补后的两个文件没有区别。

+3

如果分支之间有属性更改,则这不起作用。 – 2009-02-10 20:59:25

+6

这不适合我。生成的补丁文件仍然将复制的文件显示为对原始文件的修改(例如,它具有以 - 开头的行以及不以 - 或+开头的行)。此外,尝试进行修补会产生:“14块中的12块失败 - 将拒绝文件保存到文件”。您是否尝试过使用实际具有内容的源文件以及内容与源文件不同的目标文件? – 2011-01-07 13:09:08

0

如果不了解具体情况,您正试图努力确定您为什么要这么做。我感觉你正试图在一个孤立的环境中进行有控制的更改,以避免影响其他用户/应用程序。

你能解决这个问题吗?

  • 建立一个新分支为您的代码更改
  • 在树枝上执行的复制/移动和变化
  • 获取对方切换到这个新的代码分支,并进行分享这个分支

当你同意使用--reintegrate参数和rm分支将变更合并回主干时?

这 *保持合并,信息 *确定在版本控制的复制/移动和变化 *还有隔离来自其他用户的 *变化的步骤2中更可以避免不完全的变化是,你只需要添加一个问题的更多更改和更新

5

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

8

如果你想在你的补丁摆脱了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实用程序兼容。