Пошук уроків, статей та іншого контенту
Створите правила для файлів і каталогів, які Git не повинен відстежувати, зокрема залежностей, логів і секретів.
.gitignoreGit зазвичай бачить усі файли в каталозі проєкту. Але частину файлів не потрібно додавати до репозиторію:
залежності, встановлені менеджером пакетів;
файли логів;
тимчасові файли редакторів;
результати збирання проєкту;
локальні налаштування;
секрети, наприклад ключі API та паролі.
Файл .gitignore містить правила, за якими Git визначає, які файли й каталоги потрібно ігнорувати.
.gitignoreвпливає на файли, які ще не були додані до індексу Git. Він не припиняє відстеження файлу, який уже був закомічений.
.gitignoreФайл має називатися саме .gitignore і зазвичай розташовується в корені репозиторію:
my-project/
├── .git/
├── .gitignore
├── package.json
├── src/
└── README.mdСтворити файл можна звичайним способом:
touch .gitignoreУ Windows PowerShell:
New-Item .gitignore -ItemType FileПісля цього додайте до .gitignore правила. Наприклад:
# Залежності Node.js
node_modules/
# Логи
*.log
logs/
# Результати збирання
dist/
build/
# Локальні змінні середовища
.env
.env.local
# Тимчасові файли операційної системи
.DS_Store
Thumbs.dbРядки, які починаються зі знака #, є коментарями. Git їх ігнорує.
Щоб ігнорувати файл із певною назвою, вкажіть його назву:
.envЦе правило ігноруватиме файл .env у відповідному контексті.
Для файлу в конкретному каталозі можна вказати шлях:
config/local.jsonТаке правило стосується local.json у каталозі config.
Символ * замінює будь-яку послідовність символів:
*.logПравило ігноруватиме всі файли з розширенням .log, наприклад:
application.log
error.log
logs/server.logІнші приклади:
*.tmp
*.cache
*.bakЩоб ігнорувати каталог разом з усім його вмістом, поставте після назви символ /:
node_modules/
dist/
coverage/Символ / наприкінці означає, що правило застосовується до каталогів, а не до файлів із такою самою назвою.
Правило без початкового / може застосовуватися до відповідних файлів у різних каталогах:
*.logНаприклад, воно ігноруватиме:
error.log
logs/error.log
src/debug.logПочатковий / обмежує правило коренем репозиторію:
/config/local.jsonЦе правило ігноруватиме тільки:
config/local.jsonА файл із такою самою назвою в іншому каталозі, наприклад src/config/local.json, під це правило не підпаде.
Символ ! скасовує попереднє правило для певного файлу.
Наприклад, спочатку можна ігнорувати всі файли .log, а потім дозволити один конкретний лог:
*.log
!important.logТепер Git ігноруватиме всі .log, крім important.log.
Щоб Git міг побачити файл усередині проігнорованого каталогу, потрібно також дозволити сам каталог. Наприклад:
logs/*
!logs/important.logУ цьому випадку каталог logs/ не ігнорується цілком, а його вміст ігнорується, крім important.log.
.gitignore для проєктуОсь приклад правил для типового JavaScript-проєкту:
# Залежності
node_modules/
# Файли змінних середовища та секрети
.env
.env.*
!.env.example
# Логи
*.log
logs/
# Результати збирання та тестів
dist/
build/
coverage/
# Тимчасові файли
.tmp/
.temp/
# Файли операційної системи
.DS_Store
Thumbs.db
# Файли редакторів
.vscode/*
!.vscode/settings.json
.idea/Правило:
.env.*
!.env.exampleозначає:
ігнорувати файли, назви яких починаються з .env.;
не ігнорувати .env.example.
Файл .env.example можна додати до репозиторію як приклад потрібних змінних без реальних секретних значень:
API_URL=https://example.com
API_KEY=вкажіть_ключ_локальноСправжній .env має залишатися локальним:
API_URL=https://production.example.com
API_KEY=реальний_секретний_ключПісля створення або зміни .gitignore перевірте стан репозиторію:
git statusЯкщо правило працює, проігнорований файл не з’явиться в секції Untracked files.
Щоб перевірити, яке саме правило ігнорує файл, використайте:
git check-ignore -v logs/app.logКоманда покаже:
файл, який ігнорується;
правило, що спрацювало;
шлях до .gitignore, у якому це правило записане.
Наприклад:
.gitignore:5:*.log logs/app.logЦе означає, що файл logs/app.log ігнорується правилом *.log у п’ятому рядку .gitignore.
.gitignore.gitignore не видаляє файли з диска і не скасовує відстеження вже доданих файлів.
Припустімо, файл .env уже був доданий і закомічений:
git add .env
git commit -m "Додано локальні налаштування"Після додавання .env до .gitignore Git усе одно продовжить його відстежувати. Щоб прибрати файл з індексу, але залишити на диску, виконайте:
git rm --cached .env
git commit -m "Припинено відстеження локального файлу"Після цього .env залишиться на вашому комп’ютері, але наступні зміни в ньому Git ігноруватиме.
Якщо файл уже потрапив у спільний репозиторій і містить справжній секрет, простого додавання до .gitignore недостатньо. Секрет потрібно відкликати або замінити у відповідному сервісі.
Створимо невеликий репозиторій і перевіримо роботу .gitignore:
mkdir gitignore-demo
cd gitignore-demo
git init
mkdir logs
printf "debug information\n" > logs/app.log
printf "temporary data\n" > cache.tmp
printf "PORT=3000\n" > .env
cat > .gitignore <<'EOF'
# Ігнорувати логи
*.log
# Ігнорувати тимчасові файли
*.tmp
# Ігнорувати локальні налаштування
.env
EOF
git status
git check-ignore -v logs/app.log cache.tmp .envПісля виконання git status файли logs/app.log, cache.tmp і .env не повинні відображатися як невідстежувані.
Файл .gitignore потрібно додати до репозиторію:
git add .gitignore
git commit -m "Додано правила ігнорування"Сам файл .gitignore зазвичай комітять, щоб усі учасники команди використовували однакові правила.
.gitignoreЦе не видаляє секрет з історії комітів. Створіть .gitignore до першого додавання секретних файлів.
/ для каталогуПравило:
buildможе застосовуватися до файлів або каталогів із назвою build.
Для явного ігнорування каталогів використовуйте:
build/.gitignore скасує вже виконаний git addЯкщо файл уже доданий до індексу, потрібно окремо прибрати його з індексу:
git rm --cached filenameНе записуйте справжні ключі, паролі та токени у файли, які можуть потрапити до Git. Для спільного репозиторію зберігайте лише приклад на кшталт .env.example.
Іноді конфігураційний файл містить як загальні, так і локальні налаштування. У такому разі краще додати до репозиторію безпечний шаблон, а локальний файл ігнорувати:
config/local.json.gitignore містить правила для файлів і каталогів, які Git не повинен відстежувати.
*.log ігнорує файли з розширенням .log.
node_modules/ ігнорує каталог разом із його вмістом.
!filename скасовує попереднє правило для конкретного файлу.
.gitignore не припиняє відстеження файлів, які вже були додані до Git.
Для перевірки правила використовуйте git check-ignore -v.
Секрети потрібно ігнорувати до першого коміту, а до репозиторію можна додавати безпечні приклади конфігурації.