【问题标题】:Get an applicable patch after doing svn remove and svn rename执行 svn remove 和 svn rename 后获取适用的补丁
【发布时间】:2011-11-08 06:49:01
【问题描述】:
  1. 我删除了一些使用svn remove 的文本文件。但是svn diff 显示为删除文件中的所有内容。应用该差异的补丁只会修改内容,不会删除文件。

  2. 我使用svn rename 重命名了一个包含二进制文件的目录。来自普通svn diff 的补丁文件什么都不做。

How to make svn diff produce file that patch would apply, when svn cp or svn mv was used?

subversion diff including new files

以上链接中的两种方法都只修改文件。应用补丁后,它们不会被删除/重命名。是否有可能获得上述更改的工作补丁?

【问题讨论】:

  • 您是否签入了应用补丁的内容?
  • @JVerstry 我不太明白你的问题。我确实检查了 svn repo 的不同副本并尝试对其应用补丁,以测试它是否有效。
  • 应用补丁时,信息仅注册在隐藏的 .svn 文件中。但是,只有在您签入此 svn 存储库的不同副本后,文件才会被删除。
  • @JVerstry 在应用补丁后我使用'svn status'进行检查和比较。通过它应该可以看到所有的变化吧?
  • 我正在努力解决同样的问题。非常令人沮丧。

标签: svn diff patch


【解决方案1】:

来自patchman 页面:

-E 或 --remove-empty-files 删除补丁后为空的输出文件 被应用。通常这个选项是不必要的,因为 补丁可以检查标题上的时间戳以阻止 挖掘补丁后文件是否应该存在。然而, 如果输入不是上下文差异或补丁符合要求 到 POSIX,补丁不会删除空的补丁文件 除非给出这个选项。当补丁删除一个文件时,它 还会尝试删除任何空的祖先目录。

【讨论】:

    【解决方案2】:

    试试这个:

    patch -p0 -E < 1.patch && svn rm `svn st -q | grep ^! | cut -c 9-`
    

    【讨论】:

      【解决方案3】:

      我认为 OP 的第二个问题是由 SVN 1.7 中修复的 SVN 错误引起的。您更改目录结构(移动、重命名、删除)并提交它,但是当使用svn diff 时,补丁似乎“什么都不做”。

      我在删除目录时遇到了这个问题,并且症状相同,所以我假设我们遇到了相同的“根错误”。对我来说,更新到 svn 1.7 解决了这个问题,因为 svn 1.7 生成的差异(补丁)不同。

      svn diff 的某些版本根本不会将移动/重命名/删除的文件放在差异中!

      请参阅:http://svn.haxx.se/dev/archive-2004-03/0333.shtml。这封来自 SVN DEV 列表的存档电子邮件显示,在十多年前 1.0.1 发布之前的某个时间,开发人员自己发现了这个问题。如果你关注这个帖子,他们似乎很坚定地修复它,但即使是 1.6 也将一些东西排除在差异之外。我必须更新到 1.7。

      基本上,如果 svn svn delete'd,它就不会递归和处理孩子,它只会停在那里,不会在差异树下放任何东西。这不是我们想要的,我们希望为所有子项显式删除,以便补丁可以如其他答案中所述,通过 -E 删除空文件和目录。如果文件不在补丁中,补丁将无法执行任何操作。

      使用 svn 1.7,我做了一个与以前相同的差异,但已删除目录下的每个文件都明确地在补丁中删除了所有行(清空),然后 patch/quilt 成功删除了文件和文件夹。我假设在移动或重命名的情况下需要发生类似的事情。

      问题: 升级到 1.7 将使您的工作副本毫无用处。 确保在更新之前提交更改。然后您必须再次签出所有内容。 编辑:SVN 1.7 客户端可能能够修复您的工作目录,但如果不能,您可能需要再次签出。请注意,以免失去工作。

      【讨论】:

        猜你喜欢
        • 2012-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-16
        • 2010-09-23
        • 2014-06-10
        • 1970-01-01
        相关资源
        最近更新 更多