Хотите исключить файл из "git diff"
Я пытаюсь исключить файл (db/irrelevant.php
) от Git diff. Я попытался положить файл в db
подкаталог под названием .gitattributes
С irrelevant.php -diff
и я также попытался создать файл с именем .git/info/attributes
содержащих db/irrelevant.php
.
во всех случаях!--0--> файл включен в diff как двоичный патч Git. Я хочу, чтобы изменения в этом файле игнорировались командой diff. Что я делаю не так?
7 ответов:
Omg, драйверы и awk, чтобы исключить паршивый файл ? Так как git 1.9 что-то вы можете:
git diff -- . ':(exclude)db/irrelevant.php'
Ах, элегантность! Смотрите цитируемый ответ и подробности ответ by @torek
вы можете настроить пользовательский драйвер diff с командой no op и назначить его тем файлам, которые следует игнорировать.
создать специальный драйвер diff для репозитория С помощью этой команды
git config diff.nodiff.command /bin/true
или для всех ваших РЕПО с
--global
.(если
/bin/true
не существует в MacOS, альтернативы будут использовать/usr/bin/true
илиecho
).затем назначьте новый драйвер diff для тех файлов, которые вы хотите проигнорировать in ваш .
irrelevant.php diff=nodiff
если это состояние предполагается совместно использовать с другими разработчиками, вы можете использовать
.gitattributes
вместо.git/info/attributes
и доляgit config
команда с вашими коллегами (через файл документации или что-то).
вы также можете использовать filterdiff на patchutils коллекция программ для исключения некоторых частей diff. Например:
git diff | filterdiff -p 1 -x db/irrelevant.php
Это однострочное решение не требует никаких других utils / загрузок:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
здесь
file/to/exclude.txt
- это имя файла, который вы хотите исключить, конечно.изменить: кредит ksenzee для исправления удаленных файлов, нарушающих разницу.
этот метод короче, чем принятый anwer.
git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'
для получения дополнительной информации о различных возможностях включения/исключения читайте этот пост
аналогично Бен ру!--5--> решение, но обмен в любом случае:
git status --porcelain | grep -v $PATTERN_TO_EXCLUDE | awk '{print }' | 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 }' | xargs git diff origin/master git diff --name-only origin/master | grep -v docs | xargs git diff origin/master
Если вы хотите сделать это только для визуального осмотра diff, визуальный инструмент diff (например Meld) позволит вам сделать это с помощью короткой команды, которую легко запомнить.
во-первых, настройте инструмент diff, если вы еще этого не сделали.
$ git config --global diff.tool = meld
затем вы можете запустить каталог diff.
$ git difftool --dir-diff
вы сможете просматривать различия (по файлам) в Meld (или ваш инструмент выбора). Просто не открывайте файл, который вы хотите игнорировать.