Как разделять и редактировать патчи?

10

Иногда мне нужно разбить большой патч на меньший (непересекающийся), например, для каждой отдельной включенной функции.

Обычно я делаю это через стандартные команды vim yank / dd и переключение через разделенное окно.

Но есть ли какие-нибудь инструменты / vim-tricks, чтобы помочь с таким редактированием?

Например, поддержка таких команд, как: переместить 3 следующих полных блока в правый открытый файл патча.

maxschlepzig
источник
Вы также можете посмотреть на unix.stackexchange.com/questions/618/how-to-merge-patches
Maciej Piechotka
1
Кстати, почему люди отвечают на вопрос, но не находят его полезным / понятным, чтобы проголосовать за него ?! ;)
maxschlepzig

Ответы:

7

Возможно, вы захотите взглянуть на patchutils [1]. Для части vim я написал небольшой плагин vim, который помогает с навигацией в патчах: diff_navigator [2].

[1] http://cyberelk.net/tim/software/patchutils/

[2] http://www.vim.org/scripts/script.php?script_id=2361

Петр Узел
источник
1
diff_navigatorURL, по- видимому vim.org/scripts/script.php?script_id=2361 Emacs имеет сходные черты в Ediff режимах и SMerge
Риккардо Murri
2
Не могли бы вы расширить свой ответ, чтобы сделать его более полным? Добавление примера того, как использовать утилиту из набора patchutils для разделения большого патча на непересекающиеся, было бы замечательно ...
maxschlepzig
5

Я думаю, что это немного не по теме, но я все еще думаю, что это полезно.

Если вы используете git для своей разработки, вы можете легко разделить все ваши изменения на более мелкие «кусочки», каждый из которых содержит одну особенность. Вы в конечном итоге с одной фиксации на функции и может использовать Git и git-format-patchсоздавать (и даже подписать и надлежащим образом атрибутов) пятна, я обрисовал , как сделать это здесь

Tante
источник
3

У моего Suse есть splitdiffутилита, которая работает так:

$ splitdiff -a tmp.179639.patch
Wrote >tmp.179639.patch.part001
Wrote >tmp.179639.patch.part002
akond
источник
0

Вы можете использовать это, чтобы разделить большой патч на более мелкие куски (либо на файл, либо на каждый кусок), а затем, если вам нужно объединить, тогда используйте командуiffiff из пакета patchutils , который был упомянут в ответе Петра Узела.

Дрор Коэн
источник