Я пытаюсь исключить файл ( db/irrelevant.php
) из Git diff. Я попытался поместить файл в db
подкаталог, названный .gitattributes
строкой, irrelevant.php -diff
и я также попытался создать файл, .git/info/attributes
содержащий db/irrelevant.php
.
Во всех случаях db/irrelevant.php
файл включается в diff как двоичный патч Git. Я хочу, чтобы изменения в этом файле игнорировались командой diff. Что я делаю не так?
.gitignore
синтаксиса файла. Например,:!*shrinkwrap.yaml
вместо:!shrinkwrap.yaml
.git diff -- . ':(exclude)*.min.js' ':(exclude)*.min.css'
git diff -- . ":(exclude)db/irrelevant.php"
(двойные кавычки вместо одинарных кавычек)git diff -- . :(exclude)db/irrelevant.php
Вы можете настроить собственный драйвер diff с помощью команды no op и назначить его тем файлам, которые следует игнорировать.
С помощью этой команды создайте специфичный для репозитория драйвер diff
или для всех ваших репо с
--global
.(Если
/bin/true
не существует в MacOS, альтернативы будут использовать/usr/bin/true
илиecho
).Затем назначьте новый драйвер diff тем файлам, которые вы хотите игнорировать в своем
.git/info/attributes
файле.Если это состояние должно быть совместно с другими разработчиками , вы могли бы использовать
.gitattributes
вместо.git/info/attributes
и разделитьgit config
команду со своими коллегами (через файл документации или что - то).источник
[diff "nodiff"]
`command = / bin / true`, а затем создал файл с именем .git / info / attribute, в которые я добавил:irrelevant.php diff=nodiff
git diff --stat
. В этом случае можно использоватьgit diff ... | diffstat
в качестве обходного пути.--no-ext-diff
Вы также можете использовать программу filterdiff из коллекции программ patchutils, чтобы исключить некоторые части diff. Например:
источник
-p
из man-страницы (1) это «-pn, --strip-match = n При сопоставлении игнорируйте первые n компонентов пути». Мне потребовалось некоторое время, чтобы понять, что-p 1
это убираетdb
деталь с пути ОП. Если вы просто хотите указать имя файла и игнорировать все возможности path / dir, вы можете использовать-p 99
.Этот метод короче принятых ответов.
Для получения дополнительной информации о различных возможностях включения / исключения прочитайте этот другой пост
источник
Это однострочное решение не требует других утилит / загрузок:
Где
file/to/exclude.txt
, конечно, имя файла, который вы хотели бы исключить.Изменить: кредит Ksenzee для исправления удаленных файлов, нарушающих различий.
источник
git diff --stat master
без особого успеха - не могли бы вы помочь?Действительно хороший ответ от KurzedMetal за то, что мне нужно было сделать, а именно способность видеть, что файл изменился, но не генерировать diff, который мог бы быть огромным, в моем случае.
Но мой коллега предложил подход, который был еще проще и работал для меня:
добавление
.gitattributes
файла в каталог, в котором находится файл, который будет игнорироваться,git diff
со следующим содержимым:file-not-to-diff.bin -diff
Это все еще позволяет
git status
"видеть", изменился ли файл.git diff
также «увидит», что файл изменился, но не будет генерироватьdiff
.Это
.bin
расширение для файла в примере было преднамеренным. Я понимаю, что это стандартное поведение git для двоичных файлов, и оно не требует специальной обработки с.gitattributes
. Но в моем случае эти файлы были распознаны как текстовые файлы утилитой git и «file», и это помогло.источник
Самый простой ответ
git diff ':!db/irrelevant.php'
Это только
':!<path to file>'
после вашей команды diff. Команда diff может быть настолько сложной, насколько вам нравится, и вы можете использовать подстановочные знаки, такие как*.min.js
или добавлять несколько исключений (пробел разделяет блоки в кавычках), если хотите.источник
Относительно корневого каталога git
git diff
принимает необязательное исключениеВы можете добавить несколько подстановочных знаков
Целевые типы файлов
Или напишите небольшой скрипт для ваших точечных файлов
Такие как
.bash_profile
или.zshrc
источник
git diff --staged
Надеюсь, что это поможет вам.Это очень просто, вы можете исключить то, что вы хотите, используя стандартные команды Unix, эти команды доступны в git bash даже в среде Windows. В приведенном ниже примере показано, как исключить diff для файлов pom.xml, сначала проверьте, что diff для master только для имен файлов, затем с помощью 'grep -v' исключите ненужные файлы, а затем снова запустите diff для master с предварительно подготовленным списком:
источник
похоже на решение Бена Ру , но все равно делится:
или, если изменения уже были зафиксированы локально:
Примеры:
источник
Я делаю следующее:
Я знаю, что это не изящное решение, и иногда его нельзя использовать (например, если у вас уже есть подготовленные материалы), но это помогает без необходимости вводить сложные команды.
источник
Если вы хотите сделать это только для визуальной проверки различий, инструмент визуального сравнения (например, Meld ) позволит вам сделать это с помощью короткой команды, которую легко запомнить.
Во-первых, настройте инструмент сравнения, если вы еще этого не сделали.
Затем вы можете запустить каталог diff.
Вы сможете просматривать различия (по файлам) в Meld (или по вашему выбору). Просто не открывайте файл, который хотите игнорировать.
источник