Как я могу ограничить git -diff только одним каталогом, без его дочерних элементов?
Я использую git diff --name-status
для отслеживания, какие файлы были изменены/добавлены/удалены/переименованы/скопированы между двумя коммитами, и он отлично работает.
Теперь предположим, что я перемещаю файл file1
в newdir/file1
, фиксирую, а затем запускаю git diff, я получаю следующее:
$ git diff --name-status -C HEAD~1 HEAD
R100 file1 newdir/file1
Есть ли способ попросить git ограничить себя списком изменений внутри данного каталога, но не его дочерними? Я хотел бы узнать точные изменения как для корневого каталога, так и для каталога newdir
, отдельно. Для newdir
легко:
$ git diff --name-status -C HEAD~1 HEAD -- newdir
A newdir/file1
... но как я могу получить "дополнительную" информацию diff в корневом каталоге? I.e., этот выход:
$ git diff ???
D file1
Обратите внимание, что я хочу сохранить параметр -C
для обнаружения переименований и копий внутри одного каталога.
Ответы
Ответ 1
Пропустите его до grep:
git diff --name-status HEAD..HEAD~1 . | grep ^[^/]*$
Это отфильтрует все, что содержит вспомогательную директорию, если вам нужно что-то получить от этого глубже:
git diff --name-status HEAD..HEAD~1 <path> | grep ^<path>[^/]*$
Вы можете легко создать псевдоним, если хотите.
Ответ 2
Я знаю, что это возможно в git, но у меня возникло бы желание использовать программы filterdiff/grepdiff из patchutils что-то вроде этого должно работать нормально
git diff -C .... | filterdiff --clean -x '*/*/**'