2014-06-24 43 views
2

我想在SVN上有一个补丁队列系统(就像guilt或者mercurial-mq提供的补丁队列系统一样)。如何减去两个svn补丁文件?

SVN已经能够导出补丁文件,代表从远程到工作副本的区别。我已经可以使用它了,并在每次更改内容时都创建一个补丁,但该补丁也包含我所做的所有更改。这通常不会在应用修补程序时产生问题,因为冗余部分将被忽略。

即便如此,我希望我的修补程序仅包含从保存到当前工作副本的最后一个修补程序中所做的更改,以便它们更加灵活。我可以删除一个修补程序以“恢复”它,或者我可以选择仅应用一部分修补程序。为了做到这一点,我认为我唯一需要的是一个可以减去两个补丁的工具。

例如,给定001.patch:

Index: myrepo/myfile.h 
=================================================================== 
--- myrepo/myfile.h (revision 200) 
+++ myrepo/myfile.h (working copy) 
@@ -283,1 +283,1 @@ 
    void f(); 

和002.tmp.patch:

Index: myrepo/myfile.h 
=================================================================== 
--- myrepo/myfile.h (revision 200) 
+++ myrepo/myfile.h (working copy) 
@@ -283,1 +283,1 @@ 
    void f(); 

Index: myrepo/myfile.c 
=================================================================== 
--- myrepo/myfile.c (revision 200) 
+++ myrepo/myfile.c (working copy) 
@@ -283,1 +283,1 @@ 
    void f() { } 

我想获得002.patch:

Index: myrepo/myfile.c 
=================================================================== 
--- myrepo/myfile.c (revision 200) 
+++ myrepo/myfile.c (working copy) 
@@ -283,1 +283,1 @@ 
    void f() { } 

中当然,当事情被删除或修改时,这一点不太明显。无论如何,我会很高兴与一个大块级减法(只需要002.tmp.patch并删除所有在001.patch中具有相同副本的所有hunk)

回答