Ответы:
Да, если вы убедитесь, что git расширяет глоб, а не вашу оболочку, тогда он будет совпадать на любом уровне, поэтому что-то вроде этого (кавычки важны) должно работать нормально.
git diff -- '*.c' '*.h'
git diff -- *.{c,h,etc}
git diff master HEAD -- "*filename.txt"
также полезноgit diff master HEAD --name-only
''
) также важны! git diff -- src/*.js
должно бытьgit diff -- 'src/*.js'
Чтобы включить файлы рекурсивно (включая текущий каталог), это работало для меня:
git diff -- '***.py'
git diff -- '***.py' ':!.Trashes'
Либо используйте globstar вашей оболочки (который выполняет рекурсивный поиск) 1 , 2 :
shopt -s globstar
git diff -- *.py **/*.py
или используйте поиск:
find -name '*.py' -print0 | xargs -0 git diff --
Оба они являются специальными именами и пробелами. Хотя вы можете фильтровать каталоги с расширением .py :)
1 мне нравится делать git diff -- {.,**}/*.py
обычно
2 Когда Globstar включен, git diff -- **/*.py
уже включает ./*.py
. На странице руководства Bash: «Если после / / два соседних * будут соответствовать только каталогам и подкаталогам».
Аргумент командной строки для расширения.
git diff *.py
В качестве альтернативы, вы можете трубы find
в git diff
:
find . -name '*.py' -type f | git diff --
git diff *.py
и без кричащих заголовков
Как было протестировано на git версии 2.18.0, расширение файла должно быть заключено в двойные кавычки. Если вы хотите найти последние различия между вашим локальным репозиторием и удаленным, после извлечения вы можете использовать:
git diff YourBranchName@{1} YourBranchName --name-only "*.YourFileExtionsion"
Например:
git diff master@{1} origin/master --name-only "*.cs"
git diff master@{1} origin/master --name-only -- "*.cs"
Кажется, ни один из ответов выше не работает для меня git bash
в Windows. Я не уверен, что это версия (я использую 1.8.4) или Windows / bash; также, в моем случае, я хотел разграничить две ветви, где каждая ветвь имела дополнительные файлы, отсутствующие в другой ветке (таким образом, основанные на 'находке' являются опущенными).
В любом случае, это сработало для меня (в моем примере я искал разницу между файлами 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 --
Это показывает diffs для указанного коммита, только если имя файла содержит слово «test» (без учета регистра) и не заканчивается .sql
, измените конвейер так, как необходимо для вашего случая.