Применение патча построчно

Поскольку я пока застрял с инструментами Subversion и оболочки, git-gui и тому подобное не может быть и речи. Существуют ли какие-либо инструменты оболочки для интерактивного применения патча построчно?


person l0b0    schedule 09.02.2011    source источник
comment
Есть Meld, который можно настроить для работы с SVN. Хотя это графический инструмент, не уверен, что это соответствует требованиям.   -  person Piskvor left the building    schedule 09.02.2011


Ответы (3)


Попробуйте передать параметр --dry-run в patch. Это позволит вам идентифицировать проблемные фрагменты и отредактировать патч и/или исправляемый файл соответствующим образом.

person ezod    schedule 09.02.2011
comment
sdiff подходит для слияния двух файлов. Это не очень поможет, когда у вас есть патч для интерактивного применения. Что ж, для этого достаточно просто использовать patch с опцией --dry-mode, чтобы найти недопустимые фрагменты и отредактировать. - person tonio; 09.02.2011
comment
@l0b0: на самом деле это --dry-run - person Hasturkun; 09.02.2011
comment
sdiff file1 file2 -o outfile будет различать файл1 и файл2 и интерактивно показывать каждое изменение, и вы выбираете, какой из них вы хотите перейти в исходный файл. sdiff лучший. - person pvinis; 30.04.2012
comment
@pvinis: Ваш комментарий должен быть ответом, и ИМО должен быть принятым! - person Matthew Leingang; 01.10.2014

ipatch предоставляет возможности и удобство выбора и редактирования исправлений в Darcs для тех, кто не использует Система контроля версий Darcs.

Это позволяет пользователю в интерактивном режиме разделить файл исправления на несколько файлов исправления, а также применить исправление в интерактивном режиме и, возможно, частично.

Введение от автора здесь .

person ephemient    schedule 09.02.2011

см. этот ответ.

Хотя это и не интерактивный вариант, можно вручную отредактировать файл .diff и удалить все ненужные изменения.

Если вы откроете diff-файл в emacs и поместите редактор в diff-mode, вы сможете редактировать патчи, и emacs попытается обновить маркеры фрагментов. (Emacs автоматически откроет .diff файлов в diff-mode.)

Чтобы обновить маркеры вручную после внесения изменений, выполните C-c C-w для регенерации кусок.

Чтобы применить ханки один за другим, выполните C-c C-a. Для обратного применения выполните C-u C-c C-a. Вы также можете M-x diff-tell-file-name применить их к другому файлу.

Я обнаружил, что patch original patch.diff более надежен, чем patch < patch.diff, а файлы исправлений, созданные с помощью diff -u, с ними легче работать.

Информация также задокументирована здесь.

ОБНОВЛЕНИЕ [5.21.21]:
C-c C-s позволяет разделять фрагменты, что очень удобно при редактировании вручную. Иногда C-c C-w (diff-ignore-whitespace-hunk) не делает то, что вы намеревались, так что безопаснее всего будет разделить ханки и позволить emacs автоматически обновлять заголовки. Это особенно полезно, когда строки остаются неизменными; просто разделите на кусок и удалите, чтобы удалить изменение.

person young_souvlaki    schedule 02.11.2020