компилируется...
Перейти к основному содержанию
Рекомендовать во Вконтакте Рекомендовать в Фейсбуке Рекомендовать в Твиттере

Игнорирование файлов и каталогов в Git

Часто при работе над проектом, использующим Git, вы хотите исключить передачу определенных файлов или каталогов в удаленный репозиторий.

Файл .gitignore указывает, какие неотслеживаемые файлы должен игнорировать Git .

Какие файлы следует игнорировать?

Игнорируемые файлы обычно представляют собой файлы, специфичные для платформы, или автоматически созданные из сборочных систем. Ниже приводятся некоторые общие примеры:

  • Runtime файлы, такие как log, lock, cache или временные файлы (tmp).
  • Файлы с конфиденциальной информацией, такие как пароли или ключи API.
  • Каталоги зависимостей, такие как /vendor или /node_modules.
  • Build каталоги, такие как /public или /dist.
  • Системные файлы, такие как .DS_Store или Thumbs.db
  • Конфигурационные файлы IDE или текстового редактора.

Шаблоны .gitignore

.gitignore - это простой текстовый файл, в каждой строке которого содержится шаблон файла или каталога, который необходимо проигнорировать.

.gitignore использует glob шаблоны для сопоставления имен файлов с символами подстановки (Это что-то вроде регулярных выражений). Если у вас есть файлы или каталоги, содержащие шаблон подстановки (например *), вы можете использовать один обратный слеш (\*), чтобы экранировать такой символ.

Комментарии

Строки, начинающиеся со знака хэша (#), являются комментариями и игнорируются. Пустые строки могут быть использованы для улучшения читабельности файла и группировки связанных строк шаблонов.

Слэш

Символ косой черты (/) представляет собой разделитель каталогов. Наклонная черта в начале шаблона относится к директории, в которой находится файл .gitignore.
Если шаблон начинается со слеша, то он соответствует файлам и каталогам только в корне хранилища.

Если шаблон не начинается со слэша, он соответствует файлам и каталогам в любом каталоге или подкаталоге.

Если шаблон заканчивается косой чертой, то он соответствует только каталогам. Когда каталог игнорируется, все его файлы и подкаталоги также игнорируются.

Имена файлов

Самый простой шаблон - это просто имя файла без каких-либо специальных символов.

ШаблонПримеры совпадений
/access.logaccess.log
access.logaccess.log
logs/access.log
var/logs/access.log
build/build

Символы подстановки

* - Символ звездочки соответствует нулю или более символам.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
*.logerror.log
logs/debug.log
build/logs/error.log

** - Два соседних символа звездочки соответствуют любому файлу или нулю или более каталогам. Когда за ним следует косая черта (/), она соответствует только каталогам.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
logs/**Совпадает со всем, что находится в каталоге logs.
**/buildvar/build
pub/build
build
foo/**/barfoo/bar
foo/a/bar
foo/a/b/c/bar

? - Вопросительный знак соответствует любому отдельному символу.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
access?.logaccess0.log
access1.log
accessA.log
foo??fooab
foo23
foo0s

Квадратные скобки

[…] - Совпадает с любыми символами, заключенными в квадратные скобки. Когда два символа разделены дефисом - обозначает диапазон символов. Диапазон включает в себя все символы, находящиеся между этими двумя символами. Диапазон может быть алфавитным или цифровым.

Если первый символ после [ является восклицательным знаком (!), то образец соответствует любому символу, кроме символов из указанного набора.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
*.[oa]file.o
file.a
*.[!oa]file.s
file.1
file.0
access.[0-2].logaccess.0.log
access.1.log
access.2.log
file.[a-c].outfile.a.out
file.b.out
file.c.out
file.[a-cx-z].outfile.a.out
file.b.out
file.c.out
file.x.out
file.y.out
file.z.out
access.[!0-2].logaccess.3.log
access.4.log
access.Q.log

Исключающие шаблоны

Шаблон, начинающийся с восклицательного знака (!), отменяет (повторно включает) любой файл, игнорируемый предыдущей шаблоном. Исключением из этого правила является повторное включение файла, если его родительский каталог исключен.

ШАБЛОНПРИМЕРЫ СОВПАДЕНИЙ
*.log
!error.log
error.log or logs/error.log will not be ignored

Пример .gitignore

Ниже приведен пример того, как может выглядеть ваш файл .gitignore:

# Игнорировать каталог node_modules 
node_modules/ 

# Игнорирование логов 
logs 
*.log 

# Игнорирование каталога со сборкой проекта
/dist 

# Игнорирование файла содержащий переменные окружения  
.env 

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

Для рекурсивного удаления каталога используйте параметр -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

На выходе отображается путь к файлу игнорирования, номер соответствующей линии и фактический шаблон.

www/.gitignore:31:/yarn.lock	www/yarn.lock

Команда также принимает в качестве аргументов более одного имени файла, и файл не обязательно должен существовать в рабочем дереве.

Отображение всех игнорируемых файлов

Команда git status с опцией -ignored отображает список всех проигнорированных файлов:

git status --ignored

Заключение

Файл игнорирования .gitignore позволяет исключить файлы из проверки в репозитории. Файл содержит шаблоны, которые описывают, какие файлы и каталоги следует игнорировать.

gitignore.io - это онлайн-сервис, позволяющий генерировать файлы .gitignore для вашей операционной системы, языка программирования или среды разработки.

Комментарии

Пока что нет комментариев, вы можете быть первым.
Войти или Регистрация , чтобы оставлять комментарии.

Лучшие публикации

Популярные теги

Наш сайт использует куки. Узнайте больше о нашем использовании куки: политика в отношении файлов cookie
Наш сайт существует только благодаря показу онлайн-рекламы нашим посетителям.
Пожалуйста, поддержите нас, отключив блокировку рекламы.