Как вы получаете список файлов, включенных в diff? - PullRequest
4 голосов
/ 16 октября 2010

У меня есть файл патча, содержащий вывод git diff.Я хочу получить сводку всех файлов, которые, согласно файлу патча, были добавлены или изменены.Какую команду я могу использовать для достижения этой цели?

Ответы [ 4 ]

14 голосов
/ 16 октября 2010

patchutils включает утилиту lsdiff.

2 голосов
/ 16 октября 2010

grep '+++' mydiff.patch кажется, добивается цели.

Я также могу использовать git diff --names-only, что, вероятно, лучше.

1 голос
/ 28 апреля 2014
grep '+++' mydiff.patch|perl -pe 's/\+\+\+ //g'

подробности:

git diff производит вывод в формате

+++ b/file

Так что, если вы используете grep, как предложил Натан

grep '+++' mydiff.patch

У вас будет список затронутых файлов с добавлением '+++' (3 знака плюс и пробел).

Мне часто нужно дополнительно обрабатывать файлы и находить удобным иметь одно имя файла в строке без чего-либо еще. Это может быть достигнуто с помощью следующей команды, где perl / regex удаляет эти знаки плюс и пробел.

grep '+++' mydiff.patch|perl -pe 's/\+\+\+ //g'

Для файлов исправлений, сгенерированных с помощью diff -Naur, файл mydiff.patch содержит записи с именем файла и датой (указывает символ пробела табуляции)

+++ b/file<tab>2013-07-03 13:58:45.000000000 +0200

Чтобы извлечь имена файлов для этого, используйте

grep '+++' mydiff.patch|perl -pe 's/\+\+\+ (.*)\t.*/\1/g'
0 голосов
/ 05 сентября 2018

Когда вы анализируете патчи, сгенерированные git format-patch или другими, содержащими дополнительную информацию о количестве отредактированных строк, важно искать ^+++ (в начале строки), а не просто +++.

Например:

grep '^+++' *.patch | sed -e 's#+++ [ab]/##'

выведет пути без a/ или b/ в начале.

...