Исключить каталог из git diff
Мне интересно, как я могу исключить весь каталог из моего Git diff. (В этом случае /spec ). Я создаю diff для всей нашей версии программного обеспечения, используя команду Git diff. Однако изменения в спецификации не имеют отношения к этой процедуре и просто создают головные боли. теперь я знаю, что могу сделать
git diff previous_release..current_release app/
Это создало бы diff для всех изменений в каталоге приложения, но не, например, в каталоге lib/. Кто-нибудь знает, как выполнить эту задачу? Спасибо!
Изменить: я просто хочу быть ясным, я знаю, что могу просто поместить параметры всех моих каталогов в конце, минус /spec. Я надеялся, что есть способ по-настоящему исключить один каталог в команде.
Ответы
Ответ 1
Предполагая, что вы используете bash, и вы включили расширенное globbing (shopt -s extglob
), вы можете обработать это со стороны оболочки:
git diff previous_release current_release !(spec)
Сохраняет список всех остальных вещей.
Или оболочка-агностик:
git diff previous_release current_release --name-only | grep -v '^spec/' \
| xargs git diff previous_release current_release --
Вы можете обернуть это в оболочку с одним слоем script, чтобы сохранить себя, чтобы повторно указать аргументы.
Ответ 2
На основе этого ответа вы также можете использовать:
git diff previous_release..current_release -- . ':!spec'
Это новая функция git, которая позволяет исключить определенные пути. Он должен быть более надежным, чем различные оболочки.
Я размещаю это здесь, потому что этот вопрос по-прежнему является хитом №1 для "git diff exclude path".
Ответ 3
Вы можете попробовать и отключить атрибут diff для любых файлов в каталоге lib.
.gitattributes
:
lib/* -diff
racl101 добавляет в комментариях:
Чтобы добавить к этому, для тех из вас, кто хочет ограничить вывод git diff
файлов определенного типа, в пределах определенного каталога и его подкаталогов, как и весь JavaScript, сгенерированный пакетом Webpack вашего .js
файлы, например, вы можете добавить это в .gitattributes
:
dist/js/**/*.js -diff
Затем вы не видите весь этот шум в своем выходном файле git diff, и он просто показывает как: Binary files ... differ
, что более полезно.
Ответ 4
Если вы хотите указать более одного пути для исключения в git diff, вы просто добавляете дополнительные параметры исключения в конец, например. исключить все из каталогов поставщиков и корзин из статистики: -
git diff --stat previous_release..current_release -- . ':!vendor' ':!bin'
Ответ 5
Git diff теперь принимает пользовательский формат исключения: git diff -- ':(exclude)lib/*'
Будьте осторожны, если у вас много повторяющихся имен папок ('/app', '/lib' и т.д.), так как это исключает файлы, относящиеся к текущему рабочему каталогу и корневому каталогу git.
Ответ 6
git diff app lib