Ответ 1
OMG, драйверы и awk, чтобы исключить паршивый файл? С git 1.9 вы можете:
git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'
Ах, элегантность! Смотрите цитируемый ответ и для подробностей этот ответ @torek
Я пытаюсь исключить файл (db/irrelevant.php
) из Git diff. Я попытался поместить файл в подкаталог db
под названием .gitattributes
с линией irrelevant.php -diff
и я также попытался создать файл с именем .git/info/attributes
, содержащий db/irrelevant.php
.
Во всех случаях файл db/irrelevant.php
включен в diff как двоичный патч Git. Я хочу, чтобы изменения этого файла игнорировались командой diff. Что я делаю неправильно?
OMG, драйверы и awk, чтобы исключить паршивый файл? С git 1.9 вы можете:
git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'
Ах, элегантность! Смотрите цитируемый ответ и для подробностей этот ответ @torek
Вы можете настроить собственный драйвер diff без команды op и назначить его тем файлам, которые следует игнорировать.
Создайте специальный драйвер diff хранилища с помощью этой команды
git config diff.nodiff.command /bin/true
или для всех ваших репозиций с --global
.
(Если /bin/true
не существует в MacOS, альтернативы будут использовать /usr/bin/true
или echo
).
Затем назначьте новый драйвер diff тем файлам, которые вы хотите игнорировать в вашем файле .git/info/attributes
.
irrelevant.php diff=nodiff
Если это состояние должно использоваться совместно с другими разработчиками, вы можете использовать .gitattributes
вместо .git/info/attributes
и делиться командой git config
со своими сверстниками (через файл документации или что-то в этом роде).
Вы также можете использовать filterdiff программу patchutils, чтобы исключить некоторые части различия. Например:
git diff | filterdiff -p 1 -x db/irrelevant.php
Это однострочное решение не требует других utils/downloads:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
Где file/to/exclude.txt
- это имя файла, который вы хотели бы исключить, конечно.
Изменить: кредит ksenzee для исправления удаленных файлов, нарушающих diff.
Этот метод короче принятых ответов.
git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'
Для получения дополнительной информации о различных возможностях включения/исключения прочитайте этот другой пост
Действительно хороший ответ от KurzedMetal за то, что мне нужно было сделать, а именно способность видеть, что файл изменился, но не генерировать diff, который мог бы быть огромным, в моем случае.
Но мой коллега предложил подход, который был еще проще и работал для меня:
добавление файла .gitattributes
в каталог, где файл, который будет игнорироваться git diff
содержит следующее содержимое:
file-not-to-diff.bin -diff
Это все еще позволяет git status
"видеть", изменился ли файл. git diff
также "увидит", что файл изменился, но не сгенерирует diff
.
Это расширение .bin
для файла в примере было преднамеренным. Я понимаю, что это стандартное поведение git для двоичных файлов, и оно не требует специальной обработки с .gitattributes
. Но в моем случае эти файлы были распознаны как текстовые файлы утилитой git и "file", и это помогло.
похож на решение Ben Roux, но все равно поделитесь:
git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print $2}' | xargs git diff
или, если изменения уже были зафиксированы локально:
git diff --name-only origin/master | grep -v $PATTERN_TO_EXCLUDE | xargs git diff origin/master
Примеры:
git status --porcelain | grep -v docs | awk '{print $2}' | xargs git diff origin/master
git diff --name-only origin/master | grep -v docs | xargs git diff origin/master
Это очень просто, вы можете исключить то, что вы хотите, используя стандартные команды Unix, эти команды доступны в git bash даже в среде Windows. В следующем примере показано, как исключить diff для файлов pom.xml, сначала проверьте, что diff для master только для имен файлов, затем с помощью 'grep -v' исключите ненужные файлы, а затем снова запустите diff для master с предварительно подготовленным списком:
git diff master 'git diff --name-only master | grep -v pom.xml'
Если вы хотите сделать это только для визуальной проверки различий, инструмент визуальных различий (например, Meld) позволит вам сделать это с помощью короткой команды, которую легко запомнить.
Во-первых, настройте инструмент сравнения, если вы еще этого не сделали.
$ git config --global diff.tool = meld
Затем вы можете запустить каталог diff.
$ git difftool --dir-diff
Вы сможете просматривать различия (по файлам) в Meld (или по вашему выбору). Просто не открывайте файл, который хотите игнорировать.