Какую опцию следует использовать, чтобы ограничить git diff данным набором расширений файлов?
есть ли возможность ограничить git diff к заданному набору расширений файлов?
8 ответов:
да, если вы гарантируете, что git расширяет глобус, а не вашу оболочку, то он будет соответствовать на любом уровне, поэтому что-то вроде этого (кавычки важны) должно работать нормально.
git diff -- '*.c' '*.h'
либо использовать globstar вашей оболочки (который делает рекурсивный поиск)1,2:
shopt -s globstar git diff -- *.py **/*.pyили использовать find:
find -name '*.py' -print0 | xargs -0 git diff --оба они являются специальными именами и доказательством пробелов. Хотя вы, возможно, захотите, чтобы фильтровать для каталогов, имеющих .расширение пы :)
1 Мне нравится делать
git diff -- {.,**}/*.pyобычно2, Когда globstar включен,
git diff -- **/*.pyуже включает в себя./*.py. На странице Баша: 'если после A/, два соседних *S будут соответствовать только каталогам и подкаталогам.-
для рекурсивного включения файлов (включая текущий dir) это сработало для меня:
git diff -- '***.py'
для простых шаблонов файлов, это, кажется, работает:
$ git ls-files -zm '*.txt' | xargs --null git diffпробел безопасный, и вы можете иметь несколько расширений тоже:
$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff
аргумент командной строки для расширения.
git diff *.pyв альтернативе, вы можете трубить
findнаgit diff:find . -name '*.py' -type f | git diff --
ни один из ответов выше, кажется, не работает для меня под
git bashна Windows. Я не уверен, что это версия (я использую 1.8.4) или Windows/bash thing; также, в моем случае, я хотел различать две ветви, где каждая ветвь имела дополнительные файлы, не присутствующие в другой ветви (таким образом, "найти" на основе них-это упущение).в любом случае это сработало для меня (в моем примере, ища разницу между файлами python):
git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`
git diffбудет показывать только различия в файлах проиндексированы.Я нашел этот вопрос, потому что я хотел исключить
.infoфайлыgit diff. Я достиг этого, поставив его сgit add *.info, что уменьшает количество файлов слева.
Я закончил с этим:
commit=<the_commit_hash_goes_here> && git diff --name-only $commit | grep -i Test | egrep -v '\.sql$' | xargs git diff $commit --это показывает различия для указанной фиксации только в том случае, если имя файла содержит слово "test" (без учета регистра) и не заканчивается на
.sqlизменить трубопровода по мере необходимости для вашего случая.