Мне интересно, как я могу исключить весь каталог из моего Git diff. (В данном случае / спец). Я создаю diff для всей нашей версии программного обеспечения с помощью команды git diff. Однако изменения в спецификациях не имеют значения для этой процедуры и просто создают головную боль. теперь я знаю, что могу сделать
git diff previous_release..current_release app/
Это создаст diff для всех изменений в каталоге приложения, но не, например, в каталоге lib /. Кто-нибудь знает, как выполнить эту задачу? Спасибо!
Изменить: я просто хочу быть ясным, я знаю, что я могу просто привести параметры всех моих каталогов в конце, минус / спецификации. Я надеялся, что есть способ действительно исключить единственный каталог в команде.
Ответы:
Предполагая, что вы используете bash и включили расширенный globbing (
shopt -s extglob
), вы можете обработать это со стороны оболочки:Избавляет вас от необходимости перечислять все остальные вещи.
Или оболочечный:
Вы можете обернуть это в однострочный скрипт оболочки, чтобы избавить себя от необходимости вводить аргументы заново.
источник
.!(.|)
чтобы соответствовать всем, начиная с.
кроме.
и..
.--
я только что добавил, должен это исправить.--name-only
в самом конце.-- path/of/new/file
и он этоНа основании этого ответа вы также можете использовать:
Это новая функция git, которая позволяет исключить определенные пути. Он должен быть более надежным, чем различные оболочки оболочки.
Я публикую это здесь, потому что этот вопрос по-прежнему является хитом № 1 для "git diff exclude path".
источник
git diff previous_release current_release --name-status -- . ':!spec'
current_release
иprevious_release
заставил меня улыбнуться, когда я понял это.git diff --stat dev -- . ':!/Mopy/Docs/*'
. Что не работает для меняgit diff dev --stat -- . ':!('Mopy/Docs/Wrye Bash General Readme.html'|'Mopy/Docs/Wrye Bash Advanced Readme.html')'
и вариацийgit diff --check -- . ':!config/database.yml'
git diff previous_release current_release -- . ':!file_a' ':!file_b'
Если вы хотите указать более одного пути для исключения в git diff, вы просто добавляете дополнительные параметры исключения в конец, например, чтобы исключить все в каталогах vendor и bin из статистики: -
источник
Вы можете попытаться сбросить атрибут diff для любых файлов в каталоге lib.
.gitattributes
:racl101 добавляет в комментариях :
источник
.gitattributes
файл в специальную ветку, созданную только для этого вида 'release' diff;) Перебазируйте эту специальную ветку поверхcurrent_release
и сделайте ваш diff оттуда._site/* -diff
Git diff теперь принимает пользовательский формат исключения:
git diff -- ':(exclude)lib/*'
Будьте осторожны, если у вас много повторяющихся имен папок ('/ app', '/ lib' и т. Д.), Так как это исключит файлы относительно текущего рабочего каталога и корневого каталога git.
источник
git diff -- . ':(exclude)lib/*'
?git diff
все, что связано с вашим текущим путем, а не требоватьgit diff -- .
git diff -- ":(exclude)lib/*"
Относительно корневого каталога git
git diff
принимает необязательное исключениеВы можете добавить несколько подстановочных знаков
Целевые типы файлов
Некоторый синтаксический сахар применяется
Или напишите небольшой скрипт для ваших дотфайлов
Такие как
.bash_profile
или.zshrc
источник
источник