Как исправить только конкретный кусок от 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 может работать таким образом. Кажется, я видел, как ветер это делал, но прошло какое-то время, так как я должен был его использовать.
Что касается инструментов командной строки, я не видел ничего, что будет делать то, что вы просите.