инструмент diff и patch

1877
Mike

Я пытаюсь сгенерировать патчи для группы файлов, которые я изменил. Я использую Meld, который отлично справляется с работой над файлами в хорошем визуальном стиле, а затем позволяет мне сохранять и генерировать файл патча на основе этих изменений.

У меня проблема в том, что делать это по одному медленно. Есть ли подобный инструмент, который я могу использовать для пакетной работы? Я хочу, чтобы он рекурсивно проверял все файлы в двух каталогах и генерировал все файлы исправлений на основе полученных результатов.

1

2 ответа на вопрос

3
John

Хотя я никогда не использовал Meld, у меня есть ощущение, что он использует «diff» под одеялом. Способ, которым я всегда генерировал файлы патчей, прост:

$ diff -ruN $ $ > $ .patch 

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

Я думаю, что вы правы, я не знал о опции `-u` для` diff`, которая делает форматирование одинаковым. Как мне обновить эту строку, чтобы избежать определенных файлов? Например, любые файлы `* .o`, которые находятся в каталогах. Mike 11 лет назад 0
Используйте параметр --exclude = . Существует ряд опций, которые вы можете или не хотите использовать, я бы посоветовал прочитать справочную страницу, чтобы понять, что доступно. Программа diff на самом деле довольно мощная. John 11 лет назад 0
1
terdon

Вот для чего diff. patchпринимает diffвыходные файлы в качестве входных данных. Просто запустите diffцикл BASH для каждого из ваших файлов. Например, если исходные файлы находятся в dirA, а новые - в dirB (с теми же именами файлов), сделайте это (в ./dirA):

for n in $(ls * | grep -v ".o$"); do \ diff -uN $n dirB/$n > $n.patch; patch $n < $n.patch; \ done  
@ Майк, см. Мой обновленный ответ, чтобы избежать файлов `.o`. terdon 11 лет назад 0