Исключить каталог из git diff - PullRequest
       4

Исключить каталог из git diff

152 голосов
/ 07 декабря 2010

Мне интересно, как я могу исключить весь каталог из моего Git diff.(В данном случае / спец).Я создаю diff для всей нашей версии программного обеспечения с помощью команды git diff.Однако изменения в спецификациях не имеют значения для этой процедуры и просто создают головную боль.теперь я знаю, что могу сделать

git diff previous_release..current_release app/

Это создаст diff для всех изменений в каталоге приложения, но не, например, в каталоге lib /.Кто-нибудь знает, как выполнить эту задачу?Спасибо!

Редактировать: Я просто хочу прояснить, я знаю, что я могу просто записать параметры всех моих каталогов в конце, минус / спецификации.Я надеялся, что есть способ действительно исключить единственный каталог в команде.

Ответы [ 6 ]

269 голосов
/ 31 марта 2015

На основе этого ответа вы также можете использовать:

git diff previous_release..current_release -- . ':!spec'

Это новая функция git, которая позволяет исключать определенные пути.Он должен быть более надежным, чем различные оболочки оболочки.

Я публикую это здесь, потому что этот вопрос по-прежнему является хитом № 1 для "git diff exclude path".

126 голосов
/ 07 декабря 2010

Если вы используете bash и включили расширенную глобализацию (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 --

Вы можете заключить это в однострочный сценарий оболочки, чтобы избавить себя от необходимости повторно вводить аргументы.

30 голосов
/ 07 декабря 2010

Вы можете попытаться сбросить атрибут diff для любых файлов в каталоге lib.
.gitattributes:

lib/* -diff

racl101 добавляет в комментарии :

Просто добавьте к этому, для тех из вас, кто хочет ограничить вывод git diff файлов определенного типа в пределах определенногокаталог и его подкаталоги, как, например, весь JavaScript, сгенерированный упаковкой Webpack ваших .js файлов, например, вы можете добавить это в .gitattributes:

dist/js/**/*.js -diff

Тогда вы нене вижу всего этого шума в вашем выводе git diff, и он просто показывает: Binary files ... differ, что более полезно.

29 голосов
/ 04 мая 2016

Если вы хотите указать более одного пути для исключения в git diff, вы просто добавляете дополнительные параметры исключения в конец, например, чтобы исключить все из каталогов vendor и bin из статистики: -

git diff --stat previous_release..current_release -- . ':!vendor' ':!bin'
14 голосов
/ 12 сентября 2017

Git diff теперь принимает пользовательский формат исключения: git diff -- ':(exclude)lib/*'

Будьте осторожны, если у вас много повторяющихся имен папок ('/ app', '/ lib' и т. Д.), Так как это будетисключить файлы относительно текущего рабочего каталога и корневого каталога git.

0 голосов
/ 07 декабря 2010
git diff app lib
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...