Файл .gitignore необходим для сокрытия файлов и директорий от Git. Чаще всего, исключают конфигурационные файлы (особенно с паролями), временные файлы и директории. Синтаксис файла .gitignore соответствует glob формату для отбора.
Основной синтаксис:
Каждая строчка – отдельный шаблон
Пустые строки просто игнорируются
Строки, которые начинаются с решетки (#) – комментарии
Прямой слеш (/) в начале строки указывает на текущую корневую директорию (где находится файл .gitignore)
Астериск (*) заменяет любое количество символов
Два астериска (**) используются для указания всех субдиректорий
Восклицательный знак (!) в начале строки инвертирует шаблон (используется для исключений)
Для экранирования спецсимволов используем обратный слэш (\).
Для игнорирования всей директории, правило должно оканчиваться на слэш(/), в противном случае правило считается именем файла.
Пример файла .gitignore:
# Игнорируем файл file1.txt.
file1.txt
# Игнорируем tmp файлы
*.tmp
# Но конкретно main.tmp не игнорировать
!main.tmp
# Игнорируем zip файлы только в корне проекта
/*.zip
# Игнорируем 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
Например убрать папку storage/framework/cache/ (обратите внимание: вначале отсутствует слеш)
$ git rm -r --cached "storage/framework/cache/"
За подробностями можете обратиться к официальному руководству.