.gitignore
Описание
В рабочей копии файлы видны Git как один из следующих типов: отслеживаемые, неотслеживаемые и игнорируемые.
Игнорируемые файлы — это файлы, которые Git было указано игнорировать. Обычно к ним относятся артефакты сборки, журналы, метаданные ОС и конфигурации IDE. Если вы хотите, чтобы эти файлы были зафиксированы, сначала они должны быть получены из исходного кода репозитория. Ниже приведены некоторые примеры игнорируемых Git файлов:
- Файлы, которые генерируются во время выполнения (например, .log, .lock),
- Скрытые системные файлы (.DS_Store, Thumbs.db),
- Скомпилированный код (.o, .class) и так далее.

Шаблоны игнорирования Git
Файлы игнорирования Git находятся в файле с именем .gitignore. Их редактируют и добавляют в репозиторий вручную, поскольку команды git ignore не существует. Файлы игнорирования Git содержат шаблоны, сопоставляемые с именами файлов, с помощью которых вы решаете, игнорировать файл или нет. Эти шаблоны создаются с помощью нескольких символов:
| Pattern | Explanation |
|---|---|
| **/logs | Двойные звёздочки используются для сопоставления каталогов в любом месте репозитория |
| **/logs/debug.log | Двойные звёздочки используются для сопоставления файлов по их имени и имени родительского каталога. |
| *.log | Звёздочка сопоставляет ноль или более символов. |
| *.log !important.log | Восклицательный знак инвертирует шаблон. Файл не будет игнорироваться, если он соответствует инвертирующему шаблону, определённому позже. |
| *.log !important/*.log trace.* | Более поздний шаблон может снова сделать файл неигнорируемым, если он ранее был исключён из игнорирования, при условии, что он соответствует тому же файлу. |
| /debug.log | Косая черта сопоставляет файлы только в корне репозитория. |
| debug.log | По умолчанию шаблоны сопоставляют файлы в любом каталоге. |
| debug?.log | Знак вопроса сопоставляет ровно один символ. |
| debug[0-9].log | Квадратные скобки используются для сопоставления одного символа из определённого диапазона. |
| debug[01].log | Квадратные скобки сопоставляют один символ из определённого набора. |
| debug[!01].log | Восклицательный знак используется для сопоставления любого символа, кроме одного из определённого набора. |
| debug[a-z].log | Диапазоны могут быть числовыми или буквенными. |
| logs | Шаблон будет сопоставлять как файлы, так и содержимое каталогов с таким именем, если он не используется вместе с косой чертой. |
| logs/ | Использование косой черты указывает, что шаблон является каталогом. Всё содержимое любого каталога с таким именем, включая его файлы и подкаталоги, в репозитории будет проигнорировано Git. |
| logs/**/debug.log | Двойная звёздочка сопоставляет ноль или более каталогов. |
| logs/*day/debug.log | Звёздочки можно использовать и в именах каталогов. |
Вот пример с одним из этих шаблонов:
Шаблоны .gitignore
debug0.log
debug1.log
#but not
debug10.logОбщие файлы .gitignore в репозитории
Вы можете определить несколько файлов .gitignore в разных каталогах репозитория. Каждый из шаблонов проверяется относительно каталога, который содержит этот файл. Однако самый простой способ — определить один файл .gitignore в корне репозитория.
Поскольку ваш файл .gitignore добавляется в репозиторий, в нём ведётся версионирование, как и для других файлов, и он становится общим для вашей команды, когда вы отправляете изменения. В .gitignore следует включать только те шаблоны, которые полезны другим пользователям репозитория.
Личные правила игнорирования Git
Личные шаблоны игнорирования также можно определить для конкретного репозитория в специальном файле .git/info/exclude. Это подходящее место для шаблонов, полезных только вам, поскольку они не версионируются и не распространяются вместе с вашим репозиторием.
Глобальные правила игнорирования Git
Вы можете задать свойство Git core.excludesFile, чтобы дополнительно указать глобальные шаблоны игнорирования Git для всех репозиториев в вашей локальной системе. Этот файл вы создаёте сами. Вы можете поместить свой глобальный файл .gitignore в домашний каталог, чтобы его было легко найти. После создания файла настройте его расположение с помощью команды git config, например так:
global gitignore rules
touch ~/.gitignore
git config --global core.excludesFile ~/.gitignoreИгнорирование ранее зафиксированного файла
Чтобы игнорировать файл, который был ранее зафиксирован, его следует удалить из репозитория. Затем нужно добавить для него правило .gitignore. С помощью опции --cached в git rm файл будет удалён из репозитория, но останется в рабочем каталоге как игнорируемый файл. Однако если вы хотите удалить его и из рабочего каталога, просто не указывайте опцию --cached.
.gitignore commited files
echo debug.log >> .gitignore
git rm --cached debug.log
#rm 'debug.log'
git commit -m "Start ignoring debug.log"Фиксация игнорируемого файла
Игнорируемый файл можно добавить в репозиторий с помощью комбинации параметра -f (или --force) и git add. Однако используйте этот способ, если у вас есть общее правило, например *.log, но вы хотите зафиксировать конкретный файл:
commiting ignored files
cat .gitignore
# *.log
git add -f debug.log
git commit -m "Force adding debug.log"Если нет, самый простой способ — задать исключение из общего правила:
commit ignored files
echo '!debug.log' >> .gitignore
cat .gitignore
#*.log
#!debug.log
git add debug.log
git commit -m "Adding debug.log"Сохранение в stash игнорируемого файла
Команда git stash забирает как незафиксированные подготовленные, так и неподготовленные изменения, сохраняет их для дальнейшего использования, а затем возвращает их в вашу рабочую копию. По умолчанию она игнорирует игнорируемые файлы и сохраняет в stash только изменения, отслеживаемые Git. Но параметр --all заставит эту команду сохранить изменения в игнорируемых и неотслеживаемых файлах.
Отладка файлов .gitignore
В случае сложных шаблонов .gitignore или при наличии нескольких файлов .gitignore бывает трудно понять, почему конкретный файл игнорируется. Команда git check-ignore с параметром -v (или --verbose) определяет, какой шаблон вызывает игнорирование конкретного файла:
git check ignored files
git check-ignore -v debug.log
#.gitignore:3:*.log debug.logВот вывод:
git check-ignore
<file containing the pattern> : <line number of the pattern> : <pattern> <file name>Практика
Какие утверждения точно описывают функциональность и правила файлов `.gitignore` в Git?