Gitignore файл: Подробнее о файле .gitignore — orlov.io
Подробнее о файле .gitignore — orlov.io
27
мая
.gitignore служит для указания в нём файлов и папок, которые необходимо скрыть от системы контроля версий git.
Как правило, скрывают файлы или папки, которые автоматически генерируют своё содержимое, либо имеют конфигурационные параметры, которые могут различаться у тех, кто совместно работает над проектом.
Приведу простой пример: у вас имеется файл «
/config/db.php«, в нём прописаны параметры подключения к БД, причём на вашей локальной машине и на сервере эти параметры будут разниться.
А если эти файлы различны, то git будет при каждом pull/push ругаться на то, что имеется конфликт.
Другой пример: если вы используете NetBeans и настройки своего проекта храните непосредственно в папке с проектом, то вам необходимо закрыть от git`а директорию «nbproject«, чтобы другие участники вашего проекта не страдали от того, что вы случайно закомитили эту директорию.
Данная ситуация легко разрешатся использованием файла
.gitignore, который можно разместить в папке «/config/.gitignore» со следующим содержимым:
/db.php
Одна эта строчка укажет git, что необходимо игнорировать файл »
db.php«, который лежит в этой директории.
Но я бы
рекомендовал вам разместить файл .gitignore в корне вашего приложения, таким образом он всегда будет под рукой и отпадает необходимость вспоминать, где вы оставили другие такие же файлы.
Вот некоторые правила синтаксиса этого файла:
- Одна строчка — одно правило,
- Пустые строки игнорируются,
- Комментарии доступны через решётку(#) в начале строки,
- Символ «/» в начале строки указывает, что правило применяется только к файлам и папкам, которые располагаются в той же папке, что и сам файл . gitignore,
- Доступно использовать спецсимволы: звёздочка(*) заменяет любое количество символов(ноль или больше), вопросик(?) заменяет от нуля до одного символа. Можно размещать в любом месте правила,
- Две звёздочки(**) используются для указания любого количества поддиректорий, подробнее смотри ниже в примерах,
- Восклицательный знак(!) в начале строки означает инвертирование правила, необходим для указания исключений из правил игнорирования,
- Символ «\» используется для экранирования спецсимволов, например, чтобы игнорировать файл с именем «!readme!.txt«, нужно написать такое правило: «\!readme!.txt«,
- Для игнорирования всей директории, правило должно оканчиваться на слэш(/), в противном случае правило считается именем файла.
Привожу наглядный пример файла
.gitignore:
# Игнор-лист файлов проекта
# Игнорировать ВСЕ файлы и директории, включая поддиректории и файлы в них
*
# ---- ФАЙЛЫ ----
# Игнорирование по типу файла, будут игнорироваться в АБСОЛЮТНО всех директориях
# Например /files/data.zip, /server.log, /uploads/users/data/info.xls
*.zip
*.xls
# Игнорирование файла во ВСЕХ директориях
# Например /params/db/config.php, /config.php
config.php
# Игнорирование конкретного файла ТОЛЬКО в корне проекта
# (корнём считается расположение файла .gitignore)
# Например НЕ БУДЕТ проигнорирован файл /db/config.php
/config.php
# Игнорирование конкретного файла ТОЛЬКО в указанной директории
# Например НЕ БУДЕТ проигнорирован файл /prod/params/config. php
/params/config.php
# ---- ДИРЕКТОРИИ ----
# Игнорирование всех файлов и папок ТОЛЬКО в конкретной директории(включая поддиректории и файлы в них)
# Например /images/user.jpg, /images/company/logo.png
# НЕ БУДУТ проигнорированы файлы и папки /prod/images/user.jpg
/images/*
# Игнорирование всех файлов и папок в ЛЮБЫХ директориях с указанным именем
# Например /images/user.jpg, /core/images/user.jpg
images/*
# Игнорирование ВСЕХ html-файлов в ОДНОЙ КОНКРЕТНОЙ директории(НЕ ВКЛЮЧАЯ поддиректории)
# Например /private/index.html
# НЕ БУДУТ проигнорированы файлы в /private/ivan/index.html
/private/*.html
# Игнорирование ВСЕХ html-файлов в КОНКРЕТНОЙ директории ВКЛЮЧАЯ поддиректории
# Например /private/info.html, /private/users/ivan/info.html
/private/**/*. html
# ---- РАЗНОЕ ----
# Исключение из игнорирования
# Игнорирование ВСЕХ файлов и папок внутри директории /secret,
# за исключением файла /secret/free.txt, он не будет проигнорирован
/secret/*
!/secret/free.txt
# Игнорирование файла с именем, содержащим спецсимволы
# Например !readme!.txt
\!readme!.txt
# Игнорирование всех JPG и JPEG файлов внутри директорий,
# которые начинаются на "h" и МОГУТ содержать ещё один символ после
# Например /images/h5/user.jpg, /images/h/company.jpeg
/images/h?/*.jp?g
В репозитории
https://github.com/github/gitignore вы можете найти примеры .gitignore-файлов для своего проекта. Например, если вы используете Yii framework, то вам следует обратить внимание на файл https://github.com/github/gitignore/blob/master/Yii.gitignore, в нём перечислены основные директории, которые следует исключить из git-репозитория.
У некоторых может возникнуть вопрос:
«Я добавил в .gitignore файл/директорию, но после пуша в репозиторий там сохранился игнорируемый файл/директория, и если сделать git clone, то файл/директория так же склонируются«.
Ответ таков: Нужно удалить из репозитория игнорируемые файлы/директории, делается это командой:
git rm --cached <file>
После этого файл окончательно пропадёт из отслеживаемых git`ом.
Конфигурация файла .gitignore в Git
Файл .gitignore необходим для сокрытия файлов и директорий от Git. Чаще всего, исключают конфигурационные файлы (особенно с паролями), временные файлы и директории. Синтаксис файла .gitignore соответствует glob формату для отбора.
Основной синтаксис:
Каждая строчка — отдельный шаблон
Пустые строки просто игнорируются
Строки, которые начинаются с решетки (#) — комментарии
Прямой слеш (/) в начале строки указывает на текущую корневую директорию (где находится файл . gitignore)
Астериск (*) заменяет любое количество символов
Два астериска (**) используются для указания всех субдиректорий
Восклицательный знак (!) в начале строки инвертирует шаблон (используется для исключений)
Для экранирования спецсимволов используем обратный слэш (\).
Для игнорирования всей директории, правило должно оканчиваться на слэш(/), в противном случае правило считается именем файла.
Пример файла .gitignore:
# Игнорируем файл file1.txt.
file1.txt
# Игнорируем tmp файлы
*.tmp
# Но конкретно main.tmp не игнорировать
!main.tmp
# Игнорируем zip файлы только в корне проекта
/*.zip
# Игнорируем css файлы из папки bar не включая подпапки
# Допустим файл /bar/temp/main.css не будет проигнорирован т.к. он в подпапке temp
/bar/*.css
# Игнорировать js файлы из папки bar и подпапок, если таковые будут
/bar/**.*.js
Как исключить директорию из отслеживания, но добавить субдиректорию в отслеживание?
Задача 1
Убрать папку node_modules, но оставить в ней 2 подпапки jquery и semantic
├── js
│ ├── app. js
│ └── system.js
├── scss
│ ├── system.scss
│ └── theme.scss
└── vendor
├── node_modules <-- Убрать
│ ├── load-json-file
│ ├── lodash
│ ├── jquery <-- Оставить
│ ├── make-error
│ ├── semantic <-- Оставить
│ └── yargs
└── semantic.json
Решение:
/vendor/node_modules/*
!/vendor/node_modules/jquery/
!/vendor/node_modules/semantic/
Задача 2
Убрать папку node_modules, но оставить в её подпапке jquery подпапку dist
├── js
│ ├── app.js
│ └── system.js
├── scss
│ ├── system.scss
│ └── theme.scss
└── vendor
├── node_modules <-- Убрать
│ ├── load-json-file
│ ├── lodash
│ ├── jquery
│ │ └──dist <-- Оставить
│ ├── make-error
│ ├── semantic
│ └── yargs
└── semantic.json
Решение:
/vendor/node_modules/*
/vendor/node_modules/jquery/*
!/vendor/node_modules/jquery/
!/vendor/node_modules/jquery/dist/
Как игнорировать файлы, которые уже отслеживаются?
Если вы добавили файл или директорию в . gitignore, после того как они попали в репозиторий, то их необходимо удалить из репозитория командой:
$ git rm --cached
Например убрать папку storage/framework/cache/ (обратите внимание: вначале отсутствует слеш)
$ git rm -r --cached "storage/framework/cache/"
За подробностями можете обратиться к официальному руководству.
GIT игнорирование изменений в локальных файлах
Иногда бывает нужно внести изменения в локальные файлы таким образом, чтобы git в дальнейшем при добавлении (git add .) или коммите (git commit -a) не отслеживал эти изменения и не сохранял их в репозиторий. Самое простое решение на первый взгляд добавить такие файлы в .gitignore, но оно не работает к файлам уже находящимся в репозитории и git по преждему отслеживает изменения этих файлов.
К счастью, есть простое решение для этого. В GIT игнорирование изменений в локальных файлах, которые уже находятся в репозитории, можно настроить с помощью одной команды. h'»
Которые в дальнейшем можно использовать следующим образом:
git untrack <file>
git ls-untrack
git track <file>
git untrack <file> git ls-untrack git track <file> |
.gitignore файл — игнорирование файлов в Git
Git видит каждый файл в вашей рабочей копии как одно из трех:
- отслеживается — файл, который ранее был поставлен или зафиксирован;
- неотслеживаемый — файл, который еще не поставил или зафиксировал; или
- ignored — файл, который Git явно должен игнорировать.
Игнорируемые файлы обычно представляют собой артефакты сборки и файлы, сгенерированные компьютером, которые могут быть получены из источника вашего репозитория или не должны фиксироваться иным образом.Вот некоторые общие примеры:
- кэшей зависимостей, таких как содержимое
/ node_modules
или/ packages
- скомпилированного кода, например
. o
,.pyc
и.class
файлов - выходных каталогов сборки, таких как
/ bin
,/ out
или/ target
- файлов, сгенерированных во время выполнения, таких как
.log
,.lock
или.tmp
- скрытых системных файлов, например
.DS_Store
илиThumbs.db
- личных конфигурационных файлов IDE, таких как
.idea / workspace.xml
Игнорируемые файлы отслеживаются в специальном файле с именем .gitignore
, который регистрируется в корневом каталоге вашего репозиторий. Нет явной команды git ignore: вместо этого файл .gitignore
должен редактироваться и фиксироваться вручную, когда у вас есть новые файлы, которые вы хотите игнорировать. .gitignore Файлы
содержат шаблоны, которые сопоставляются с именами файлов в вашем репозитории, чтобы определить, следует ли их игнорировать.
Шаблоны игнорирования Git
.gitignore
использует шаблоны подстановки для сопоставления с именами файлов. Вы можете создавать свои узоры, используя различные символы:
Шаблон | Пример совпадений | Объяснение * |
---|---|---|
** / журналы | журналы / debug.log журналы / понедельник / foo.bar build / logs / debug.log | Вы можете добавить к шаблону двойную звездочку, чтобы он соответствовал каталогам в любом месте репозитория. |
** / logs / debug.log | logs / debug.log build / logs / debug.log , но не logs / build / debug.log | Вы также можете использовать двойную звездочку для сопоставления файлов на основе их имени и имени их родительского каталога. |
* . log | debug.log foo.log .log журналы / отладка.log | Звездочка — это подстановочный знак, который соответствует нулю или более символам. |
* .log ! Important.log | debug.log trace.log , но не important.log logs / important.log | Добавление восклицательного знака к шаблону сводит его на нет. Если файл соответствует шаблону, но также соответствует отрицательному шаблону, определенному позже в файле, он не будет проигнорирован. |
* .log ! Important / *. Log trace. * | debug.log important / trace.log , но не important / debug. log | Шаблоны, определенные после шаблона отрицания, будут повторно игнорировать любые ранее отвергнутые файлы. |
/debug.log | debug.log , но не журналы / отладка.log | Добавление косой черты соответствует файлам только в корне репозитория. |
debug.log | debug.log logs / debug.log | По умолчанию шаблоны соответствуют файлам в любом каталоге |
debug? .Log | debug0. log debugg.log , но не debug10.log | Знак вопроса соответствует ровно одному символу. |
debug [0-9] .log | debug0.log debug1.log , но не debug10.log | Квадратные скобки также могут использоваться для сопоставления одного символ из указанного диапазона. |
debug [01] .log | debug0. log debug1.log , но не debug2.log debug01.log | Квадратные скобки соответствуют одному символу из указанного набора. |
debug [! 01] .log | debug2.log , но не debug0.log debug1.log debug01.log | Восклицательный знак может быть используется для соответствия любому символу, кроме одного из указанного набора. |
отладка [a-z] .log | отладка.log debugb.log , но не debug1.log | Диапазоны могут быть числовыми или буквенными. |
журналы | журналы журналы / debug.log журналы / latest / foo.bar сборка / журналы build / logs / debug. log | Если вы не добавляйте косую черту, шаблон будет соответствовать как файлам, так и содержимому каталогов с этим именем.В примере совпадений слева игнорируются и каталоги, и файлы с именами logs |
logs / | logs / debug.log logs / latest / foo.bar build / logs / foo .bar build / logs / latest / debug.log | Добавление косой черты означает, что шаблон является каталогом. Все содержимое любого каталога в репозитории, соответствующего этому имени, включая все его файлы и подкаталоги, будет проигнорировано. |
logs / ! Logs / important.журнал | журналы / debug.log журналы / important.log | Погодите! Не следует отрицать значение logs / important.log в примере слева.Нет! Из-за причуды, связанной с производительностью в Git, вы не можете инвертировать файл, который игнорируется из-за соответствия шаблона каталогу |
logs / ** / debug. log | logs / debug. журнал журналы / понедельник / отладка.log logs / monday / pm / debug.log | Двойная звездочка соответствует нулю или более каталогам. |
журналов / * день / debug.log | журналов / понедельник / debug.log журналов / вторник / debug.log , но не журналов / последний / debug.log | Подстановочные знаки также можно использовать в именах каталогов. |
журналы / debug.log | журналы / отладка.log , но не debug.log build / logs / debug.log | Шаблоны, определяющие файл в определенном каталоге, относятся к корню репозитория. (Вы можете добавить косую черту, если хотите, но это не делает ничего особенного.) |
** эти объяснения предполагают, что ваш файл . gitignore находится в каталоге верхнего уровня вашего репозитория, как это принято. Если в вашем репозитории несколько файлов .gitignore, просто мысленно замените «корень репозитория» на «каталог, содержащий файлы.gitignore file «(и подумайте об их объединении для здравомыслия вашей команды). *
В дополнение к этим символам вы можете использовать # для включения комментариев в файл .gitignore
:
# игнорировать все логи * .log
Вы можете использовать \ для экранирования .gitignore
символов шаблона, если у вас есть файлы или каталоги, содержащие их:
# игнорировать файл с буквальным именем foo [01] .txt foo \ [01 \]. Txt
Общие файлы .gitignore в вашем репозитории
Правила игнорирования Git обычно определены в .gitignore
в корне вашего репозитория. Однако вы можете определить несколько файлов .gitignore
в разных каталогах в вашем репозитории. Каждый шаблон в конкретном файле .gitignore
тестируется относительно каталога, содержащего этот файл. Однако соглашение и самый простой подход — определить один файл .gitignore
в корне. Когда ваш файл .gitignore
зарегистрирован, он версируется, как и любой другой файл в вашем репозитории, и при нажатии на него предоставляется доступ вашим товарищам по команде.Обычно вам следует включать только шаблоны в .gitignore
, которые принесут пользу другим пользователям репозитория.
Персональные правила игнорирования Git
Вы также можете определить личные шаблоны игнорирования для конкретного репозитория в специальном файле по адресу .git / info / exclude
. Они не версируются и не распространяются с вашим репозиторием, поэтому это подходящее место для включения шаблонов, которые, вероятно, принесут вам только пользу. Например, если у вас есть настраиваемая настройка ведения журнала или специальные инструменты разработки, которые создают файлы в рабочем каталоге вашего репозитория, вы можете рассмотреть возможность добавления их в . git / info / exclude
, чтобы они случайно не попали в ваш репозиторий.
Global Git игнорировать правила
Кроме того, вы можете определить глобальные шаблоны игнорирования Git для всех репозиториев в вашей локальной системе, установив свойство Git core.excludesFile
. Вам придется создать этот файл самостоятельно. Если вы не знаете, где разместить глобальный файл .gitignore
, ваш домашний каталог — неплохой выбор (и его будет легко найти позже). После того, как вы создали файл, вам необходимо настроить его местоположение с помощью git config
:
$ touch ~ /.gitignore $ git config --global core.excludesFile ~ / .gitignore
Вы должны быть осторожны с тем, какие шаблоны вы выбираете для глобального игнорирования, поскольку разные типы файлов актуальны для разных проектов. Специальные файлы операционной системы (например, .DS_Store
и thumbs.db
) или временные файлы, созданные некоторыми инструментами разработчика, являются типичными кандидатами для глобального игнорирования.
Игнорирование ранее зафиксированного файла
Если вы хотите игнорировать файл, который вы зафиксировали в прошлом, вам нужно удалить файл из вашего репозитория, а затем добавить .Правило gitignore
для этого. Использование опции --cached
с git rm
означает, что файл будет удален из вашего репозитория, но останется в вашем рабочем каталоге как игнорируемый файл.
$ echo debug.log >> .gitignore $ git rm --cached debug.log rm 'debug.log' $ git commit -m "Начать игнорирование debug.log"
Вы можете опустить опцию --cached
, если хотите удалить файл как из репозитория, так и из локальной файловой системы.
Фиксация игнорируемого файла
Можно принудительно зафиксировать игнорируемый файл в репозитории с помощью параметра -f
(или --force
) с git add
:
$ cat .gitignore * .log $ git add -f debug.log $ git commit -m «Принудительное добавление debug. log»
Вы можете подумать о том, чтобы сделать это, если у вас есть общий шаблон (например, * .log
), но вы хотите зафиксировать конкретный файл. Однако лучшим решением является определение исключения из общего правила:
$ echo! Debug.log >> .gitignore $ cat .gitignore * .log! debug.log $ git add debug.log $ git commit -m "Добавление debug.log"
Этот подход более очевиден и менее запутан для ваших товарищей по команде.
Хранение проигнорированного файла
git stash
— это мощная функция Git для временного откладывания и отмены локальных изменений, позволяющая повторно применить их позже. Как и следовало ожидать, по умолчанию git stash
игнорирует игнорируемые файлы и сохраняет изменения только в тех файлах, которые отслеживаются Git.Однако вы можете вызвать git stash с параметром —all, чтобы сохранить изменения в игнорируемых и неотслеживаемых файлах.
Отладка файлов . gitignore
Если у вас есть сложные шаблоны .gitignore
или шаблоны, распределенные по нескольким файлам .gitignore
, может быть трудно отследить, почему игнорируется конкретный файл. Вы можете использовать команду git check-ignore
с опцией -v
(или --verbose
), чтобы определить, какой шаблон вызывает игнорирование конкретного файла:
$ git check-ignore -v debug.журнал .gitignore: 3: *. журнал debug.log
Вывод показывает:
::
Вы можете передать несколько имен файлов в git check-ignore
, если хотите, и сами имена даже не обязательно должны соответствовать файлам, которые существуют в вашем репозитории.
Игнорирование файлов — GitHub Docs
Документы GitHub
Все продукты
- GitHub.com
Начиная
- Быстрый старт
- Настроить Git
- Создать репо
- Форк репо
- Быть социальным
- Изучение GitHub
- Продукты GitHub
- Изучение выпусков раннего доступа с предварительным просмотром функций
- Типы аккаунтов GitHub
- Часто задаваемые вопросы об изменениях в планах GitHub
- Интерфейс командной строки GitHub
- GitHub Desktop
- GitHub для мобильных устройств
- Разрешения на доступ на GitHub
- Глоссарий GitHub
- Шпаргалка по Git
- Учебные ресурсы Git и GitHub
- Регистрация на GitHub
- Регистрация новой учетной записи GitHub
- Подтверждение адреса электронной почты
- Настройка пробной версии GitHub Enterprise Cloud
- Настройка пробной версии GitHub Enterprise Server
- Изучение проектов на GitHub
- Поиск способов внести свой вклад в открытый исходный код на GitHub
- Сохранение репозиториев со звездочками
- Следуя за людьми
- Использование GitHub
- Поддерживаемые браузеры
- Устранение проблем с подключением
- Горячие клавиши
- Быстрый старт
Учетные записи пользователей
Как использовать. Файлы gitignore — BMC Blogs
При фиксации в любом репозитории Git вы выбираете файлы, которые хотите обработать, а затем фиксируете их.
Но вы, возможно, не захотите фиксировать каждый из ваших файлов — есть файлы, которые никогда не нужно фиксировать. Здесь полезен файл .gitignore: он сообщает Git, какие именно файлы следует игнорировать и никогда не отслеживать.
Давайте посмотрим.
Что такое gitignore?
Когда вы работаете с копией, Git просматривает каждый файл и рассматривает его тремя способами:
- Отслеживается: вы уже разместили или зафиксировали файл.
- Без отслеживания: вы не инсценировали и не совершали никаких действий.
- Игнорируется: вы явно указали Git игнорировать файл (ы).
Файл .gitignore сообщает Git, какие файлы следует игнорировать при фиксации проекта в репозитории GitHub. gitignore находится в корневом каталоге вашего репо.
Сам файл .gitignore представляет собой простой текстовый документ. Вот пример файла .gitignore:
# Бинарные файлы для программ и плагинов *.исполняемый * .exe ~ * .dll *.так * .dylib # Тестовый двоичный файл, созданный с помощью `go test -c` *.контрольная работа # Вывод инструмента покрытия go, особенно при использовании с LiteIDE *.вне # Каталоги зависимостей (удалите комментарий ниже, чтобы включить его) поставщик /
- * используется как подстановочный знак * .exe будет игнорировать любой файл с расширением .exe
- / игнорирует каталоги с таким именем. vendor / игнорирует каталог vendor.
- # прокомментирует строку
- […] игнорирует значения с любым из значений.
- *. [Abc] игнорирует файлы file.a, file.b, file.c.
- *. [A — *. [Oa] d] тире будет включать диапазон, в данном случае расширения файлов a-d.
Почему мне нужно игнорировать файлы в Git?
Вы можете игнорировать определенные файлы по нескольким причинам:
- Файлы содержат конфиденциальные данные.
- Файлы зависят от системы и не обязательно должны находиться на каждой копии машины.
- Исключение файлов поддерживает системные правила безопасности и привилегии.(Помните, что репозитории Git содержат только файлы, необходимые для получения технической поддержки, а не для совместного использования всего программного обеспечения.)
Жюльен Данжу указывает, что ваш компьютер должен игнорировать глобальный файл .ignore при каждой фиксации:
Не все используют ваш редактор или любимый инструмент для домашних животных, и никого это не волнует. Репозиторий, в котором вы работаете, используется многими другими разработчиками. Отправка запросов на вытягивание просто для добавления такой записи для игнорирования файлов, созданных вашим редактором для домашних животных, неправильно и раздражает.
Элементы для добавления в .gitignore
Не все входит в gitignore, но вот общие элементы, которые следует игнорировать:
Системные файлы
Системные файлы необходимо игнорировать. Но вы можете добавить эти файлы в глобальный файл игнорирования вместо файла игнорирования репозитория.
Рабочие области Vscode
Такие элементы, как рабочая область vscode, необходимо игнорировать.
Безопасность и ключи / секреты API
В целях безопасности файлы ключей безопасности и ключи API должны быть добавлены в gitignore.(То есть, если они даже хранятся в каталоге). Каждая фиксация записывается в историю репозитория GitHub. Если ключ отправлен, даже если он удаляется сразу после этого, запись ключа существует в этой фиксации.
Как создать глобальный gitignore для вашей системы
Глобальный файл игнорирования может находиться где угодно. Обычно он хранится в домашнем каталоге пользователя.
- Создайте файл:
сенсорный ~ / .gitignore_global
- Добавьте файл в конфигурацию Git:
git config --global core.excludesfile ~ / .gitignore_global
- Отредактируйте файл в текстовом редакторе и добавьте в него свои правила.
Просмотреть все проигнорированные файлы
git status –ignored
Начало работы с gitignore
Различные фреймворки кодирования создают свои собственные дополнительные файлы. Шаблоны .gitignore можно использовать в качестве основы для избавления от общих файлов, которые большинство людей предпочитают игнорировать.
- Python имеет свои собственные файлы.
- У системных администраторов есть свои файлы.
- MacOS и Windows имеют свой тип игнорируемых файлов.
- Различные IDE, такие как VScode и Atom, имеют свои собственные файлы .gitignore.
Чтобы начать работу с тем, которое может удовлетворить ваши потребности:
- Изучите шаблоны. Github предоставляет репозиторий шаблонов .gitignore
- Поиск файлов проекта. Toptal позволяет искать файлы .gitignore на основе вашего проекта
- В режиме программирования поиск в Google «.gitignore для [моей цели]» тоже может помочь вам в этом.
.
Дополнительные ресурсы
Дополнительную информацию по связанным темам можно найти в руководстве BMC DevOps.
Эти сообщения являются моими собственными и не обязательно отражают позицию, стратегию или мнение BMC.
Обнаружили ошибку или есть предложение? Сообщите нам об этом по электронной почте [email protected].
Правильное использование .gitignore
Вы когда-нибудь задумывались, какие шаблоны допускает .gitignore
? Было ли это ** / * / цель
, цель / *
или * цель *
?? Читайте и узнайте!
Мотивация
Каждый, кто использует Git, рано или поздно должен определить .gitignore
во вновь созданном проекте. Мы просто не хотим контролировать все версии, особенно сгенерированные файлы, такие как Maven target
или Gradle build
. Итак, как именно мы можем указать, какие файлы исключить? Можем ли мы использовать синтаксис в стиле Ant, например ** / *
, простые подстановочные знаки * target
или даже Regex [a-z] {0,3}
?
Правда
Есть только один источник истины. Официальная документация Git по gitignore
: https: // git-scm.com / docs / gitignore
Если бы только люди прочитали это перед отправкой в Stackoverflow…
Как оказалось, Git не использует ни регулярное выражение, ни подстановочные знаки, ни синтаксис в стиле Ant, а шаблоны глобусов unix (особенно те, которые действительны для fnmatch (3)
). Не волнуйтесь, вам не нужно читать документацию fnmatch (3)
, просто обратитесь к таблицам в следующих разделах.
Наиболее важные варианты использования
Перво-наперво, как мы можем исключить каждую целевую папку
, созданную Maven в каждом подмодуле?
Ответ очень прост: target /
Это будет соответствовать любому каталогу (но не файлам, следовательно, /
в конце) в любом подкаталоге относительно .gitignore
файл. Это означает, что нам вообще не нужен *
.
Вот обзор наиболее подходящих шаблонов:
. gitignore запись | Игнорирует каждые… |
---|---|
target / | … папка (из-за конечной / ) рекурсивно |
target | … файл или папка с именем target рекурсивно |
/ target | … файл или папка с именем target в самом верхнем каталоге ( из-за ведущей /) |
/ target / | … папка с именем target в самом верхнем каталоге (ведущая и конечная /) |
*.class | … каждый файл или папка , заканчивающиеся на .class рекурсивно |
Расширенные варианты использования
Для более сложных вариантов использования обратитесь к следующей таблице:
.gitignore запись | Игнорирует каждые… |
---|---|
#comment | … ничего, это комментарий (первый символ — # ) |
\ #comment | … каждый файл или папка с именем #comment ( \ для экранирования) |
target / logs / | … каждая папка с именем logs , которая является подкаталогом папки с именем target |
target / * / logs / | … каждая папка с именем регистрирует на двух уровнях в папке с именем target ( * не 9090 9 включает /) |
target / ** / logs / | … каждая папка с именем logs где-то в папке с именем target ( ** включает /) |
*. py [co] | … файл или папка, заканчивающиеся на .pyc или .pyo . Однако он не соответствует .py ! |
! README.md | Не игнорирует файл README.md , даже если он соответствует шаблону исключения, например * .md . ПРИМЕЧАНИЕ Это не работает, если файл находится в игнорируемой папке. |
Примеры
Java-проект на основе Maven
target /
*.класс
* .jar
* .war
* .ear
* .logs
* .iml
.idea /
.затмение
Важные файлы точек в вашей домашней папке
# все игнорировать ...
/ *
# ... но следующие
!/.профиль
! /. bash_rc
! /. bash_profile
! /. curlrc
Подождите, есть еще
Есть несколько мест, где Git ищет игнорируемые файлы. Помимо поиска в корневой папке проекта Git, Git также проверяет, есть ли .gitignore
в каждом подкаталоге. Таким образом, вы можете игнорировать файлы на более мелком уровне, если для разных папок нужны разные правила.
Кроме того, вы можете определить правила для конкретного репозитория, которые не зафиксированы в репозитории Git, то есть они относятся к вашей локальной копии . Эти правила попадают в файл .git / info / exclude
, который по умолчанию создается в каждом репозитории Git без записей.
Один полезный файл, который вы можете определить самостоятельно, — это глобальный файл игнорирования. У него нет расположения по умолчанию или имени файла. Вы можете определить это самостоятельно с помощью следующей команды:
git config --global core.excludesfile ~ / .gitignore_global
Каждое правило, которое входит в этот файл, применяется ко всем репозиториям Git в вашей учетной записи. Это особенно полезно для файлов ОС, таких как .DS_Store
в MacOS или thumbs.db
в Windows.
Заключение
Как мы видели, довольно легко игнорировать файлы и папки для типичных случаев использования.