
При работе над проектом, использующим Git, часто возникает необходимость исключить определённые файлы или каталоги из отправки в удалённый репозиторий. В этом случае пригодится файл .gitignore .
Файл .gitignore определяет, какие неотслеживаемые файлы Git должен игнорировать.
Какие файлы следует игнорировать
Игнорируемые файлы обычно являются платформенно-зависимыми или автоматически создаваемыми системами сборки. Вот некоторые распространённые примеры:
- Файлы времени выполнения, такие как файлы журналов, блокировок, кэшей или временные файлы.
- Файлы с конфиденциальной информацией, например паролями или ключами API.
- Скомпилированный код, такой как
.classили.o. - Каталоги зависимостей, такие как
/vendorили/node_modules. - Создайте каталоги, такие как
/public,/outили/dist. - Системные файлы, такие как
.DS_StoreилиThumbs.db - Файлы конфигурации IDE или текстового редактора .
.gitignore Шаблоны
.gitignore — это простой текстовый файл, в котором каждая строка содержит шаблон для файлов или каталогов, которые следует игнорировать.
Он использует шаблоны подстановки для сопоставления имён файлов с подстановочными знаками. Если у вас есть файлы или каталоги, содержащие подстановочный знак, вы можете использовать одинарный обратный слеш ( ) для экранирования этого символа.
Комментарии
Строки, начинающиеся с символа решётки ( # ), являются комментариями и игнорируются. Пустые строки можно использовать для улучшения читаемости файла и группировки связанных строк шаблонов.
Слэш
Символ косой черты ( / ) обозначает разделитель каталогов. Косая черта в начале шаблона указывается относительно каталога, в котором находится файл .gitignore .
Если шаблон начинается со слеша, он соответствует файлам и каталогам только в корне репозитория.
Если шаблон не начинается со слеша, он соответствует файлам и каталогам в любом каталоге или подкаталоге.
Если шаблон заканчивается косой чертой, он соответствует только каталогам. Если каталог игнорируется, все его файлы и подкаталоги также игнорируются.
Буквальные имена файлов
Самый простой шаблон — это буквальное имя файла без каких-либо специальных символов.
| Шаблон | Примеры совпадений |
|---|---|
/access.log |
access.log |
access.log |
access.loglogs/access.logvar/logs/access.log |
build/ |
build |
Универсальные символы
* — Символ звездочки соответствует нулю или более символам.
| Шаблон | Примеры совпадений |
|---|---|
*.log |
error.loglogs/debug.logbuild/logs/error.log |
** — Две смежные звёздочки соответствуют любому файлу или нулю или более каталогам. Если за ними следует косая черта ( / ), то соответствуют только каталогам.
| Шаблон | Примеры совпадений |
|---|---|
logs/** |
Соответствует любому содержимому каталога logs . |
**/build |
var/buildpub/buildbuild |
foo/**/bar |
foo/barfoo/a/barfoo/a/b/c/bar |
? — Вопросительный знак соответствует любому одиночному символу.
| Шаблон | Примеры совпадений |
|---|---|
access?.log |
access0.logaccess1.logaccessA.log |
foo?? |
fooabfoo23foo0s |
Квадратные скобки
[...] — Соответствует любому из символов, заключённых в квадратные скобки. Если два символа разделены дефисом - это обозначает диапазон символов. Диапазон включает все символы между этими двумя. Диапазоны могут быть буквенными или числовыми.
Если первый символ, следующий за [ является восклицательным знаком ( ! ), то шаблон соответствует любому символу, кроме символов из указанного набора.
| Шаблон | Примеры совпадений |
|---|---|
*.[oa] |
file.ofile.a |
*.[!oa] |
file.sfile.1file.0 |
access.[0-2].log |
access.0.logaccess.1.logaccess.2.log |
file.[ac].out |
file.a.outfile.b.outfile.c.out |
file.[a-cx-z].out |
file.a.outfile.b.outfile.c.outfile.x.outfile.y.outfile.z.out |
access.[!0-2].log |
access.3.logaccess.4.logaccess.Q.log |
Отрицательные шаблоны
Шаблон, начинающийся с восклицательного знака ( ! ), отменяет (повторно включает) любой файл, проигнорированный предыдущим шаблоном. Исключением из этого правила является повторное включение файла, если его родительский каталог исключён.
| Шаблон | Примеры совпадений |
|---|---|
*.log!error.log |
error.log или logs/error.log не будут игнорироваться |
Пример .gitignore
Ниже приведен пример того, как может выглядеть ваш файл .gitignore :
# Ignore the node_modules directory node_modules/ # Ignore Logs logs *.log # Ignore the build directory /dist # The file containing environment variables .env # Ignore IDE specific files .idea/ .vscode/ *.sw*
Локальный .gitignore
Локальный файл .gitignore обычно размещается в корневом каталоге репозитория. Однако вы можете создать несколько файлов .gitignore в разных подкаталогах репозитория. Шаблоны в файлах .gitignore сопоставляются относительно каталога, в котором находится файл.
Шаблоны, определенные в файлах, которые находятся в каталогах более низкого уровня (подкаталогах), имеют приоритет над шаблонами в каталогах более высокого уровня.
Локальные файлы .gitignore доступны другим разработчикам и должны содержать шаблоны, полезные для всех остальных пользователей репозитория.
Правила игнорирования личных сообщений
Шаблоны, специфичные для вашего локального репозитория и не подлежащие распространению на другие репозитории, следует задать в файле .git/info/exclude .
Например, вы можете использовать этот файл, чтобы игнорировать файлы, созданные вашими личными инструментами проекта.
Глобальный .gitignore
Git также позволяет создать глобальный файл .gitignore , в котором можно определить правила игнорирования для каждого репозитория Git в вашей локальной системе.
Файл можно назвать как угодно и хранить в любом месте. Чаще всего этот файл хранится в домашнем каталоге. Вам придётся вручную создать файл и настроить Git для его использования.
Например, чтобы установить ~/.gitignore_global в качестве глобального файла игнорирования Git, выполните следующие действия:
-
Создайте файл:
touch ~/.gitignore_global -
Добавьте файл в конфигурацию Git:
git config --global core.excludesfile ~/.gitignore_global -
Откройте файл с помощью текстового редактора и добавьте в него свои правила.
Глобальные правила особенно полезны для игнорирования определенных файлов, которые вы никогда не хотите фиксировать, например файлов с конфиденциальной информацией или скомпилированных исполняемых файлов.
Игнорирование ранее зафиксированных файлов
Файлы в вашей рабочей копии могут быть как отслеживаемыми, так и неотслеживаемыми.
Чтобы игнорировать файл, который был ранее зафиксирован, вам необходимо отменить индексацию и удалить файл из индекса, а затем добавить правило для файла в .gitignore :
git rm --cached filename
Опция --cached сообщает git не удалять файл из рабочего дерева, а только удалить его из индекса.
Чтобы рекурсивно удалить каталог, используйте опцию -r :
git rm --cached filename
Если вы хотите удалить файл и из индексной, и из локальной файловой системы, опустите опцию --cached .
При рекурсивном удалении файлов используйте опцию -n , которая выполнит «пробный прогон» и покажет, какие файлы будут удалены:
git rm -r -n directory
Отладка файла .gitignore
Иногда бывает сложно определить, почему конкретный файл игнорируется, особенно при использовании нескольких файлов .gitignore или сложных шаблонов. В таких случаях пригодится команда git check-ignore с опцией -v , которая заставляет git отображать подробную информацию о соответствующем шаблоне.
Например, чтобы проверить, почему игнорируется файл www/yarn.lock выполните:
git check-ignore -v www/yarn.lock
В выводе отображается путь к файлу gitignore , номер совпадающей строки и фактический шаблон.
www/.gitignore:31:/yarn.lock www/yarn.lock
Команда также принимает в качестве аргументов более одного имени файла, и файл не обязательно должен существовать в вашем рабочем дереве.
Отображение всех игнорируемых файлов
Команда git status с опцией --ignored отображает список всех игнорируемых файлов:
git status --ignored
Заключение
Файл .gitignore позволяет исключить файлы из проверки репозитория. Он содержит шаблоны подстановки, описывающие, какие файлы и каталоги следует игнорировать.
gitignore.io — это онлайн-сервис, позволяющий генерировать файлы .gitignore для вашей операционной системы, языка программирования или IDE.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства