Пошук уроків, статей та іншого контенту
Налаштуйте .gitignore для виключення залежностей, секретів, тимчасових файлів і артефактів збірки з репозиторію.
.gitignoreФайл .gitignore містить правила для файлів і каталогів, які Git не повинен додавати до індексу та показувати як невідстежувані.
Зазвичай до .gitignore додають:
залежності, встановлені менеджером пакетів;
файли з паролями, токенами та іншими секретами;
тимчасові файли редакторів;
логи;
результати компіляції та збірки;
локальні налаштування розробника;
файли операційної системи.
.gitignore не видаляє файли з комп’ютера. Він лише визначає, які невідстежувані файли Git має ігнорувати.
.gitignoreФайл має називатися саме .gitignore і зазвичай розташовується в корені репозиторію:
my-project/
├── .git/
├── .gitignore
├── package.json
└── src/Приклад .gitignore для JavaScript-проєкту:
# Залежності
node_modules/
# Файли зі змінними середовища та секретами
.env
.env.*
!.env.example
# Результати збірки
dist/
build/
# Логи
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Тимчасові файли
.tmp/
.cache/
*.tmp
# Файли операційної системи
.DS_Store
Thumbs.db
# Налаштування редакторів
.idea/
.vscode/
# Покриття тестами
coverage/Рядки, що починаються з #, є коментарями. Вони не впливають на роботу правил.
.envЦе правило ігнорує файл .env у будь-якому каталозі.
node_modules/Символ / наприкінці показує, що правило стосується каталогу.
*.logПравило ігнорує всі файли з розширенням .log, наприклад:
server.log
error.log
logs/application.log/config/local.jsonПочатковий / означає, що правило застосовується відносно каталогу, де розташований .gitignore. У цьому прикладі ігноруватиметься тільки config/local.json у корені проєкту.
Без початкового /:
config/local.jsonможуть ігноруватися такі файли в різних підкаталогах:
config/local.json
src/config/local.json
test/config/local.json!Символ ! скасовує попереднє правило для конкретного файлу.
Наприклад:
.env.*
!.env.exampleСпочатку ігноруються всі файли, назви яких починаються з .env., але .env.example знову стає дозволеним для додавання до репозиторію.
Файл .env.example може містити назви змінних без реальних секретів:
DATABASE_URL=
API_KEY=
PORT=3000Це допомагає іншим розробникам зрозуміти, які налаштування потрібні для запуску проєкту.
.gitignore до репозиторіюПісля створення файлу перевірте його стан і додайте до коміту:
git status
git add .gitignore
git commit -m "Add gitignore"Файл .gitignore зазвичай потрібно зберігати в репозиторії. Тоді всі учасники проєкту використовуватимуть однакові правила.
Команда git check-ignore показує, яке правило ігнорує файл:
git check-ignore -v .envПриклад результату:
.gitignore:5:.env .envТут Git повідомляє:
файл .gitignore;
номер рядка 5;
правило .env;
файл, до якого застосовано правило.
Щоб перевірити невідстежувані файли, використовуйте:
git status --shortЯкщо правило працює, ігнорований файл не з’явиться у списку невідстежуваних файлів.
.gitignore.gitignore працює лише для файлів, які ще не відстежуються Git.
Якщо файл уже був доданий і закомічений, додавання його до .gitignore не припинить відстеження. Наприклад, після додавання .env до .gitignore Git усе одно показуватиме зміни цього файлу, якщо він вже є в коміті.
Щоб залишити файл на комп’ютері, але прибрати його з індексу Git, виконайте:
git rm --cached .env
git commit -m "Stop tracking environment file"Для каталогу використовуйте параметр -r:
git rm -r --cached node_modules
git commit -m "Stop tracking dependencies"Після цього Git перестане відстежувати файл або каталог, але не видалить його локальну копію.
Якщо секрет уже потрапив до віддаленого репозиторію, простого додавання до
.gitignoreнедостатньо. Потрібно відкликати або замінити цей секрет, оскільки історія Git могла зберегти його попереднє значення.
Нехай проєкт має таку структуру:
project/
├── .gitignore
├── .env
├── .env.example
├── package.json
├── node_modules/
├── src/
└── dist/Файл .gitignore:
# Не додавати залежності
node_modules/
# Не додавати локальні секрети, крім прикладу
.env
.env.*
!.env.example
# Не додавати зібрані файли
dist/Послідовність команд:
git init
git add .
git status --short
git commit -m "Initial project setup"До коміту потраплять, наприклад:
.env.example
package.json
src/
.gitignoreА такі елементи будуть проігноровані:
.env
node_modules/
dist/Файл має називатися .gitignore, а не:
gitignore
.gitignore.txt
.git-ignoreДеякі файлові менеджери приховують початкову крапку або автоматично додають розширення. Перевірте точну назву командою:
ls -laЯкщо .env вже додали до коміту, правило .env саме по собі не допоможе. Потрібно прибрати файл з індексу:
git rm --cached .envПісля цього переконайтеся, що .env не з’являється у виведенні git status.
Надто загальне правило може приховати файл, який має бути в репозиторії. Наприклад:
*.jsonігноруватиме всі JSON-файли, зокрема важливі файли конфігурації.
Краще вказувати конкретні шляхи:
/config/local.jsonЯкщо потрібно ігнорувати більшість файлів каталогу, але залишити один файл, додайте виняток:
config/*
!config/example.jsonВиняток має бути записаний після правила, яке ігнорує файл або каталог.
.gitignore видалить файли.gitignore не видаляє файли та не прибирає їх автоматично з історії. Він лише впливає на роботу з невідстежуваними файлами.
.gitignore визначає файли й каталоги, які Git не повинен відстежувати.
До нього зазвичай додають залежності, секрети, логи, тимчасові файли та результати збірки.
*.log ігнорує файли за шаблоном, а /config/file обмежує правило коренем проєкту.
За допомогою ! можна створити виняток із правила.
.gitignore не впливає на файли, які вже відстежуються.
Для припинення відстеження без видалення локального файлу використовуйте git rm --cached.
Секрети не можна комітити навіть тимчасово: після потрапляння до репозиторію їх потрібно замінити або відкликати.