Как можно игнорировать определенные файлы во время git diff? Меня особенно интересует фильтрация Makefile.in, Makefile, configure (и все, что сгенерировано автоматически).Git diff ignore
ответ
Вы можете попробовать передать список файлов 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
.
О, это просто потрясающе :-D Спасибо –
Неотслеживаемые файлы не будут отображаться в diff, хотя - я думаю, 'ls-files' всегда будет много, если по какой-то причине вы не захотите * diff для некоторых невоспроизводимых файлов. – Cascabel
Что касается gitignore и Autotools интеграции, вы можете быть заинтересованы в git.mk: http://mail.gnome.org/archives/desktop-devel-list/2009-April/msg00211.html
Другим подобным решением (добавить в .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
.
Как подробно here вы можете использовать exclude
pathspec магия
git diff -- . ':(exclude)Makefile*' ':(exclude)configure'
Вы можете добавить их все в файл '.gitignore' файл; если они автоматически генерируются, имеет ли смысл хранить их в вашей системе управления версиями? – sarnold
Я не хранил их там, вот и вся проблема. Если бы я бы просто вынул их, легкомысленный. Это проблема с восходящим потоком. Но мне нужно разделить две разные ветви вверх по течению, и все, что я получаю, это всего лишь тонны этого автогенератора. Практически невозможно провести какую-либо реальную сравнительную работу. –