在执行svn删除和svn重命名后获得适用的修补程序

在执行svn删除和svn重命名后获得适用的修补程序,svn,diff,patch,Svn,Diff,Patch,我使用svn remove删除了一些文本文件。但是svn diff显示为删除文件中的所有内容。应用该差异的修补程序只会修改内容,而不会删除文件 我使用svnrename重命名了一个包含二进制文件的目录。来自普通svn diff的修补程序文件不起任何作用 以上链接中的两种方法仅对文件进行修改。应用修补程序后,它们不会被删除/重命名。是否可以从补丁手册页获取上述更改的工作补丁?: -E或--删除空文件 删除修补程序运行后为空的输出文件 已应用。通常,此选项是不必要的,因为 修补程序可以检查标头上

我使用
svn remove
删除了一些文本文件。但是
svn diff
显示为删除文件中的所有内容。应用该差异的修补程序只会修改内容,而不会删除文件

  • 我使用
    svnrename
    重命名了一个包含二进制文件的目录。来自普通
    svn diff
    的修补程序文件不起任何作用


  • 以上链接中的两种方法仅对文件进行修改。应用修补程序后,它们不会被删除/重命名。是否可以从
    补丁
    手册页获取上述更改的工作补丁?

    -E或--删除空文件 删除修补程序运行后为空的输出文件 已应用。通常,此选项是不必要的,因为 修补程序可以检查标头上的时间戳,以确定 挖掘修补后文件是否应存在。然而, 如果输入不是上下文差异或补丁是一致的—— 在POSIX中,修补程序不会删除空的修补文件 除非给出此选项。当修补程序删除文件时,它将 还尝试删除任何空的祖先目录

    试试这个:

    patch -p0 -E < 1.patch && svn rm `svn st -q | grep ^! | cut -c 9-`
    
    patch-p0-E<1.patch&svn rm`svn st-q|grep^切割-c 9-`
    
    我认为OP的第二个问题是由SVN 1.7中修复的SVN错误引起的。您可以更改目录结构(移动、重命名、删除)并提交它,但是当使用
    svn diff
    时,补丁似乎“什么都不做”

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

    有些版本的
    svn diff
    根本不将移动/重命名/删除的文件放在diff中

    请参阅:。这封来自SVN开发人员列表的存档电子邮件显示,在10多年前1.0.1发布之前的某个时候,开发人员自己发现了这个问题。如果你按照这个思路去做,他们当时似乎下定决心要解决这个问题,但即使是1.6也没有考虑差异。我必须更新到1.7

    基本上,如果svn<1.7检测到一个目录是
    svn delete
    'd,它不会递归并处理子目录,它只会停在那里,不会将任何内容放在差异中的树下。这不是我们想要的,我们希望显式删除所有子目录,以便补丁可以,如其他答案中所述,通过-E删除空文件和目录。如果文件不在修补程序中,修补程序将无法执行任何操作

    使用svn 1.7,我做了与以前相同的区分,但已删除目录下的每个文件都显式地在修补程序中删除了所有行(清空),然后
    patch
    /
    coult
    成功地删除了文件和文件夹。我假设在您的情况下,移动或重命名也会发生类似的情况

    格查斯:
    升级到1.7将使您的工作副本无效。确保在更新之前提交更改。然后你必须再次检查所有东西。编辑:SVN1.7客户端可能能够修复您的工作目录,但如果不能,您可能需要再次签出。请注意,以免丢失工作。

    您是否签入了应用修补程序的内容?@JVerstry我不太理解您的问题。我确实签出了svn repo的另一个副本,并尝试对其应用修补程序,以测试其是否有效。应用修补程序时,信息仅在隐藏的.svn文件中注册。但是,只有在签入此svn repo的不同副本后,文件才会被删除。@JVerstry我使用“svn状态”在应用修补程序后进行检查和比较。所有的变化都应该可以通过它看到,对吗?我正在努力解决同样的问题。相当令人沮丧。