Как исправить только конкретный кусок от diff

Есть ли способ применить один кусок от diff к файлу? Например, скажем, я делаю разницу с файлами A и B, и это создает три куска различий, каждый из которых обозначается чем-то вроде...

@@ -971,30 +977,28 @@

... (в случае унифицированных разностей). Я бы хотел, чтобы я мог прокормить этот diff в stdin и попросить патч применять только hunk N.

Ручным методом было бы вырезать и вставить интересные куски, но я не после такого решения.

Ответы

Ответ 1

filterdiff может помочь.

Он позволяет извлекать подмножество патчей, соответствующих различным требованиям, из одного/нескольких файлов патчей. Например, здесь мы извлекаем из файла unified_diff.patch патчи, применимые к файлам с совпадением имен one_file.c, только к строкам от 950 до 1050 исходного файла:

filterdiff -i *one_file.c --lines=950,1050 unified_diff.patch

Чтобы извлечь конкретный/диапазон кусков:

filterdiff --hunks=1,3,5-8,15 file.patch

Извлечение патчей из почтовых сообщений:

filterdiff message-with-diff-in-the-body > file.patch

и др.

Ответ 2

Некоторые из инструментов GUI diff/patch имеют возможность выбирать блоки или даже отдельные строки. Я знаю, что TortoiseDiff от TortoiseSVN может работать таким образом. Кажется, я видел, как ветер это делал, но прошло какое-то время, так как я должен был его использовать.

Что касается инструментов командной строки, я не видел ничего, что будет делать то, что вы просите.