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


10

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

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

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

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


Вы также можете посмотреть на 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создавать (и даже подписать и надлежащим образом атрибутов) пятна, я обрисовал , как сделать это здесь


3

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

$ splitdiff -a tmp.179639.patch
Wrote >tmp.179639.patch.part001
Wrote >tmp.179639.patch.part002

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.