.gitignore перелічує шаблони файлів, які Git не повинен відстежувати: залежності, кеші, логи, локальні налаштування.
Синтаксис шаблонів:
# коментар
.env # файл .env у будь-якому каталозі
/.env # лише в корені репозиторію
storage/logs/ # каталог (слеш у кінці - лише каталоги)
*.log # усі файли з розширенням .log
**/cache/*.php # cache/*.php на будь-якій глибині
!.env.example # заперечення: цей файл НЕ ігнорувати
Правила, що часто дивують:
- слеш на початку чи всередині прив'язує шаблон до каталогу, де лежить
.gitignore; без слеша шаблон спрацьовує на будь-якому рівні; - останнє правило перемагає: порядок має значення,
!скасовує попередній збіг; !не працює, якщо проігноровано батьківський каталог. Git не заходить у проігнорований каталог, тож файл усередині повернути не вийде:
storage/* # ігнорувати вміст, але не сам каталог
!storage/.gitkeep # тепер працює
.gitignoreможе бути в будь-якому підкаталозі - його правила діють відносно цього каталогу (так зроблено в Laravel:storage/framework/cache/.gitignore).
Де ще задаються виключення:
| Файл | Для чого |
|---|---|
.gitignore у репозиторії |
спільне для команди: vendor/, node_modules/, .env |
.git/info/exclude |
лише для вас у цьому репозиторії, не комітиться |
глобальний файл (core.excludesFile) |
ваші персональні файли для всіх проєктів: .DS_Store, .idea/ |
git config --global core.excludesFile ~/.gitignore_global
Файли редактора й ОС краще тримати в глобальному списку, а не в .gitignore кожного проєкту.
Перевірити, яке правило спрацювало:
git check-ignore -v storage/logs/laravel.log
# storage/logs/.gitignore:1:* storage/logs/laravel.log