Введение
Часто при работе над проектом, использующим Git, вам необходимо исключить определенные файлы или каталоги из отправки в удаленный репозиторий.
Файл .gitignore
используется для указания того, какие неотслеживаемые файлы следует игнорировать Git.
.Gitignore файл
Игнорируемые файлы обычно представляют собой файлы, специфичные для платформы, или файлы, автоматически создаваемые системами сборки. Вот некоторые распространенные примеры:
- Файлы времени выполнения, такие как журналы, блокировки, кеш или временные файлы.
- Файлы с конфиденциальной информацией, такой как пароли или ключи API.
- Скомпилированный код, например
.class
или.o
. - Каталог зависимостей, например
/vendor
или/node_modules
. - Создайте каталоги, такие как
/public
,/out
или/dist
. - Системные файлы, такие как
.DS_Store
илиThumbs.db
- Конфигурационный файл IDE или текстового редактора.
Файл .gitignore
— это обычный текстовый файл, каждая строка которого содержит шаблон игнорирования для файла или каталога.
.gitignore
использует схемы подстановки для сопоставления имен файлов и подстановочных знаков. Если у вас есть файлы или каталоги, содержащие шаблон подстановки, вы можете использовать одинарную обратную косую черту ( \
) в качестве escape-символа.
Комментарии
Строки, начинающиеся со знака решетки ( #
), являются комментариями и игнорируются. Пустые строки можно использовать для улучшения удобочитаемости файла и для группировки строк шаблона.
косая черта
Символ косой черты ( /
) представляет собой разделитель каталогов. Косая черта в начале шаблона относится к каталогу, в котором находится .gitignore
.
Если шаблон начинается с косой черты, он соответствует файлам и каталогам только в корне репозитория.
Если шаблон не начинается с косой черты, он соответствует файлам и каталогам в любом каталоге или подкаталоге.
Если шаблон заканчивается косой чертой, он соответствует только каталогам. Когда каталог игнорируется, все его файлы и подкаталоги также игнорируются.
Буквенные имена файлов
Самый простой шаблон — это буквальное имя файла без специальных символов.
Шаблон | Пример соответствует |
---|---|
/access.log | access.log |
access.log | access.log
logs/access.log
var/logs/access.log |
build/ | build |
Подстановочные символы
*
- Символ звездочки соответствует нулю или более символов.
Шаблон | Пример соответствует |
---|---|
*.log | error.log
logs/debug.log
build/logs/error.log |
**
- Два соседних символа звездочки соответствуют любому файлу или нулю или более каталогам. Если за ним следует косая черта ( /
), он соответствует только каталогам.
Шаблон | Пример соответствует |
---|---|
logs/** | Соответствует чему-либо внутри каталога logs . |
**/build | var/build
pub/build
build |
foo/**/bar | foo/bar
foo/a/bar
foo/a/b/c/bar |
?
- Знак вопроса соответствует любому одиночному символу.
Шаблон | Пример соответствует |
---|---|
access?.log | access0.log
access1.log
accessA.log |
foo?? | fooab
foo23
foo0s |
Квадратных скобок
[...]
- Соответствует любому из символов, заключенных в квадратные скобки. Когда два символа разделены дефисом -
указывает диапазон символов. Диапазон включает все символы, которые находятся между этими двумя символами. Интервалы могут быть буквенными или числовыми.
Если первый символ после [
является восклицательным знаком ( !
), шаблон соответствует любому символу, кроме тех, которые входят в указанный набор.
Шаблон | Пример соответствует |
---|---|
*.[oa] | file.o
file.a |
*.[!oa] | file.s
file.1
file.0 |
access.[0-2].log | access.0.log
access.1.log
access.2.log |
file.[ac].out | file.a.out
file.b.out
file.c.out |
file.[a-cx-z].out | file.a.out
file.b.out
file.c.out
file.x.out
file.y.out
file.z.out |
access.[!0-2].log | access.3.log
access.4.log
access.Q.log |
Негативные шаблоны
Шаблон, начинающийся с восклицательного знака ( !
), отменяет (повторно включает) любые файлы, которые игнорируются предыдущим шаблоном. Исключением из этого правила является повторное включение файла, если его родительский каталог исключен.
Шаблон | Пример соответствует |
---|---|
*.log
!error.log | error.log или logs/error.log не будут игнорироваться |
Пример
Ниже приведен пример того, как может выглядеть .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
Откройте файл в текстовом редакторе и добавьте свои правила.
Глобальные правила особенно полезны для игнорирования определенных файлов, которые вы никогда не хотите фиксировать, таких как конфиденциальные файлы или скомпилированные исполняемые файлы.
Игнорировать зафиксированный файл
Файлы в рабочей копии могут отслеживаться или не отслеживаться.
Чтобы игнорировать файл, который был ранее зафиксирован, вам нужно выполнить команду unstage и удалить файл из индекса, а затем добавить правило для файла в .gitignore
:
git rm --cached filename
Опция --cached
позволяет не удалять файл из рабочего дерева, а только удалить его из индекса.
Чтобы рекурсивно удалить каталог, используйте параметр -r
:
git rm --cached filename
Если вы хотите удалить файл как из индекса, так и из локальной файловой системы, опустите параметр --cached
.
При рекурсивном удалении файлов используйте параметр -n
, который выполнит «тестовый цикл» и покажет, какие файлы будут удалены:
git rm -r -n directory
Отладка файла.gitignore
Иногда может быть сложно определить шаблон, по которому игнорируется конкретный файл, особенно при использовании нескольких файлов .gitignore
или сложных схем. В этом случае полезна команда git check-ignore
с параметром -v
, которая позволяет просмотреть сведения о шаблоне соответствия.
Например, чтобы проверить паттерн, для которого игнорируется файл www/yarn.lock
, нужно запустить:
git check-ignore -v www/yarn.lock
Вывод показывает путь к файлу gitignore
, соответствующий номер строки и фактический шаблон.
www/.gitignore:31:/yarn.lock www/yarn.lock
Команда также принимает более одного имени файла в качестве аргументов, и файл не должен существовать в вашем рабочем дереве.
Посмотреть все пропущенные файлы
Команда status
с параметром --ignored
отображает список всех игнорируемых файлов:
git status --ignored
Вывод
Файл .gitignore
позволяет исключить файлы из проверки в репозитории. Файл, содержащий шаблоны подстановки, описывающие, какие файлы и каталоги следует игнорировать.
gitignore.io — это онлайн-сервис, который позволяет создавать файлы .gitignore
для вашей операционной системы, языка программирования или IDE.