О файле .gitignore
.gitignore нужен для скрытия файлов и папок от системы контроля версий Git. Обычно скрывают конфигурационные файлы (особенно с паролями), временные файли и папки. gitignore использует glob формат для выборки файлов.
Основной синтаксис:
- Каждая строка - отдельный шаблон
- Пустые строки игнорируются
- Строки начинающиеся с # являются комментариями
- Символ слеша "/" в начале строки указывает на текущую папку (где лежит .gitignore)
- Звёздочка(*) заменяет любое количество символов
- Две звёздочки(**) используются для указания всех подпапок.
- Восклицательный знак(!) в начале строки инвертирует шаблон (используется для исключений)
- Для экранирования спецсимволов используется обратный слэш "\". Для игнорирования всей директории, правило должно оканчиваться на слэш(/), в противном случае правило считается именем файла.
В репозитарии gitignore от github собраны примеры gitignore файлов для всех типовых проектов.
Пример .gitignore файла
# Игнорировать файл foo.txt.
foo.txt
# Игнорировать html файлы
*.html
# Но конкретно foo.html не игнорировать
!foo.html
# Игнорировать rar файлы в корне проекта
# Допустим файл /temp/main.rar не будет проигнорирован т.к. он не в корне
/*.rar
# Игнорировать css файлы из папки bar не включая подпапки
# Допустим файл /bar/temp/main.css не будет проигнорирован т.к. он в подпапке temp
/bar/*.css
# Игнорировать js файлы из папки bar и подпапок, если таковые будут
/bar/**.*.js
Как исключит папку из отслеживания, но добавить подпапку?
Задача 1
Убрать папку node_modules
, но оставить в ней 2 подпапки jquery
и semantic
├── js
│ ├── app.js
│ └── system.js
├── scss
│ ├── system.scss
│ └── theme.scss
└── vendor
├── node_modules <-- Убрать
│ ├── load-json-file
│ ├── lodash
│ ├── jquery <-- Оставить
│ ├── make-error
│ ├── semantic <-- Оставить
│ └── yargs
└── semantic.json
Решение:
/vendor/node_modules/*
!/vendor/node_modules/jquery/
!/vendor/node_modules/semantic/
Задача 2
Убрать папку node_modules
, но оставить в её подпапке jquery
подпапку dist
├── js
│ ├── app.js
│ └── system.js
├── scss
│ ├── system.scss
│ └── theme.scss
└── vendor
├── node_modules <-- Убрать
│ ├── load-json-file
│ ├── lodash
│ ├── jquery
│ │ └──dist <-- Оставить
│ ├── make-error
│ ├── semantic
│ └── yargs
└── semantic.json
Решение:
/vendor/node_modules/*
/vendor/node_modules/jquery/*
!/vendor/node_modules/jquery/
!/vendor/node_modules/jquery/dist/
Как игнорировать файлы, которые уже отслеживаются?
Если вы добавили файл или папку в .gitignore, после того как они попали в репозиторий, то их необходимо удалить из репозитория командой:
git rm --cached <file>
Например убрать папку storage/framework/cache/
. Обратите внимание: вначале отсутствует слеш.
git rm -r --cached "storage/framework/cache/"
По мотивам: