Часто при работе над проектом, использующим Git, вам нужно исключить определенные файлы или каталоги из отправки в удаленный репозиторий. Здесь .gitignore
файл .gitignore
.
Файл .gitignore
указывает, какие неотслеживаемые файлы Git должен игнорировать.
Содержание
Какие файлы следует игнорировать?
Игнорируемые файлы обычно представляют собой файлы для конкретной платформы или автоматически созданные файлы из систем сборки. Вот некоторые общие примеры:
- Файлы времени выполнения, такие как файлы журнала, блокировки, кеша или временные файлы.
- Файлы с конфиденциальной информацией, такой как пароли или ключи API.
- Скомпилированный код, например
.class
или.o
. -
/node_modules
зависимостей, например/vendor
или/node_modules
. - Каталоги сборки, например
/public
,/out
или/dist
. - Системные файлы, такие как
.DS_Store
илиThumbs.db
- Файлы конфигурации IDE или текстового редактора .
.gitignore
Шаблоны
.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
сопоставляются относительно каталога, в котором находится файл.
Шаблоны, определенные в файлах, которые находятся в каталогах (подкаталогах) более низкого уровня, имеют приоритет над шаблонами в каталогах более высокого уровня.
Локальные файлы .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.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.