如何减去两个svn补丁文件?

时间:2014-06-24 09:53:14

标签: svn patch

我想在SVN之上建立一个补丁队列系统(就像guilt或mercurial-mq提供的那样)。

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中具有相同副本的帅哥)

1 个答案:

答案 0 :(得分:0)

interdiff工具可以完全符合我的要求。 http://www.linuxcommand.org/man_pages/interdiff1.html