2010-08-13 3 views
2

Как можно игнорировать определенные файлы во время git diff? Меня особенно интересует фильтрация Makefile.in, Makefile, configure (и все, что сгенерировано автоматически).Git diff ignore

+0

Вы можете добавить их все в файл '.gitignore' файл; если они автоматически генерируются, имеет ли смысл хранить их в вашей системе управления версиями? – sarnold

+0

Я не хранил их там, вот и вся проблема. Если бы я бы просто вынул их, легкомысленный. Это проблема с восходящим потоком. Но мне нужно разделить две разные ветви вверх по течению, и все, что я получаю, это всего лишь тонны этого автогенератора. Практически невозможно провести какую-либо реальную сравнительную работу. –

ответ

5

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

В зависимости от того, как ваш код установки, это может быть столь же легко, как:

git diff otherbranchname -- src/  # only give me diffs from src/ 

или неприглядный/комплекса, как:

git diff otherbranchname -- $(git ls-files | 
    perl -lne'next if /(?:[mM]akefile(?:\.in)?|configure|whateverelse)/;print') 
# diff all files which don't match the pattern 

В зависимости от того, файлы, которые вы хотите игнорировать это управляемый Git в текущей ветке или нет, вам нужно будет заменить git ls-files на find *; вместо этого используйте find . и добавьте |.git в выражение Perl.

Tailor это, как вы считаете нужным, возможно, используя имена каталогов/файлов вы знаете вы хотите дифф, а не с помощью git ls-files или find.

+0

О, это просто потрясающе :-D Спасибо –

+0

Неотслеживаемые файлы не будут отображаться в diff, хотя - я думаю, 'ls-files' всегда будет много, если по какой-то причине вы не захотите * diff для некоторых невоспроизводимых файлов. – Cascabel

2

Другим подобным решением (добавить в .git/config):

[alias] 
    mydiff = !git diff -- $(git diff --name-only | grep -Ev "([mM]akefile|configure)") 

Затем запустите его с:

git mydiff 

Отметьте, что git diff --name-only лучше git ls-files, потому что будет проходить более короткий список файлов t o git diff, так как будут включены только файлы, которые были изменены. У меня возникли проблемы с превышением максимального количества аргументов в больших проектах при использовании git ls-files.

0

Как подробно here вы можете использовать exclude pathspec магия

git diff -- . ':(exclude)Makefile*' ':(exclude)configure'