Как игнорировать файлы и каталоги в Git с помощью.gitignore

12 set 2022 4 min di lettura
Как игнорировать файлы и каталоги в Git с помощью.gitignore
Indice dei contenuti

Введение

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.