Какой вариант следует использовать, ограничивая git diff заданным набором расширений файлов?

Есть ли возможность ограничить git diff заданным набором расширений файлов?

Ответ 1

Да, если вы убедитесь, что git расширяет glob, а не вашу оболочку, то он будет соответствовать любому уровню, поэтому что-то вроде этого (цитаты важны) должно работать нормально.

git diff -- '*.c' '*.h'

Ответ 2

Либо используйте shell globstar (который выполняет рекурсивный поиск) 1 2 :

shopt -s globstar 
git diff -- *.py **/*.py

или используйте find:

find -name '*.py' -print0 | xargs -0 git diff --

Оба они являются специальными именами и доказательством пробелов. Хотя вы можете захотеть отфильтровать каталоги с расширением .py:)


1 Мне нравится делать git diff -- {.,**}/*.py обычно

2 Когда globstar включен, git diff -- **/*.py уже включает ./*.py. В Bash manpage: 'Если за ним следует /, два соседних * s будут соответствовать только каталогам и подкаталогам.'

Ответ 3

Для простых шаблонов файлов это работает:

$ git ls-files -zm '*.txt' | xargs --null git diff

Пробел безопасен, и вы можете также иметь несколько расширений:

$ git ls-files -zm '*.h|*.c|*.cpp' | xargs --null git diff

Ответ 4

Аргумент командной строки для расширения.

git diff *.py

В качестве альтернативы вы можете передать find в git diff:

find . -name '*.py' -type f | git diff --

Ответ 5

Ни один из приведенных выше ответов не работает для меня под git bash в Windows. Я не уверен, что это вещь версии (я использую 1.8.4) или Windows/bash; также, в моем случае, я хотел разделить две ветки, где каждая ветвь имела дополнительные файлы, не присутствующие в другой ветке (при этом "находки" основаны на ошибках).

В любом случае это сработало для меня (в моем примере, ищут разницу между файлами python):

git diff branch1 branch2 -- `git diff --summary branch1 branch2 | egrep '\.py$' | cut -d ' ' -f 5`

Ответ 6

git diff будет отображаться только отличия в неустановленных файлах.

Я нашел этот вопрос, потому что я хотел исключить .info файлы из git diff. Я достиг этого, расположив его с помощью git add *.info, что уменьшает оставшиеся файлы.