#svn #patch
#svn #исправление
Вопрос:
Я хотел бы иметь систему очередей исправлений (например, предлагаемую guilty или 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)
Ответ №1:
interdiff
Инструмент может делать именно то, что я просил. http://www.linuxcommand.org/man_pages/interdiff1.html