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