Игнорирование файлов и каталогов в Git (.gitignore)

.gitignore

При работе над проектом, использующим 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.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

Ниже приведен пример того, как может выглядеть ваш файл .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, выполните следующие действия:

  1. Создайте файл:

     touch ~/.gitignore_global
  2. Добавьте файл в конфигурацию Git:

     git config --global core.excludesfile ~/.gitignore_global
  3. Откройте файл с помощью текстового редактора и добавьте в него свои правила.

Глобальные правила особенно полезны для игнорирования определенных файлов, которые вы никогда не хотите фиксировать, например файлов с конфиденциальной информацией или скомпилированных исполняемых файлов.

Игнорирование ранее зафиксированных файлов

Файлы в вашей рабочей копии могут быть как отслеживаемыми, так и неотслеживаемыми.

Чтобы игнорировать файл, который был ранее зафиксирован, вам необходимо отменить индексацию и удалить файл из индекса, а затем добавить правило для файла в .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.

Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.

мерзавец

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *