Исключить каталог из 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