.gitignore — специальный файл который говорит Git какие файлы НЕ отслеживать.
Зачем нужен .gitignore?
Проблема без .gitignore
git add .
git commit -m "update"
# Закоммитили:
# - node_modules/ (200 MB!)
# - .env (с паролями от БД!)
# - *.log (логи на 50 MB)
# - .DS_Store (мусор macOS)
❌ Последствия:
- Репозиторий раздут до гигабайтов
- Пароли утекли в публичный GitHub
- Clone репозитория занимает 10 минут
- Команда ругается
Решение — .gitignore
# .gitignore
node_modules/
.env
*.log
.DS_Store
✅ Результат:
- Git игнорирует эти файлы
- Репозиторий лёгкий и чистый
- Секреты в безопасности
Что НЕ коммитить?
1. Зависимости (dependencies)
# Node.js
node_modules/
# Python
__pycache__/
*.pyc
.venv/
venv/
# Ruby
vendor/bundle/
# PHP
vendor/
Почему: Они устанавливаются через npm install / pip install
2. Секреты и пароли 🔐
.env
.env.local
secrets.yml
config/database.yml
*.pem
*.key
НИКОГДА не коммитьте:
- API ключи
- Пароли от БД
- Секретные токены
- SSH ключи
- Сертификаты
3. Скомпилированный код и сборка
dist/
build/
*.exe
*.dll
*.so
*.o
*.class
*.pyc
4. Логи и временные файлы
*.log
*.tmp
*.swp
*~
npm-debug.log*
5. Системные файлы ОС
# macOS
.DS_Store
.AppleDouble
# Windows
Thumbs.db
desktop.ini
# Linux
*~
.directory
6. IDE конфиги
.vscode/
.idea/
*.sublime-project
*.sublime-workspace
.project
7 Базы данных (локальные)
*.sqlite
*.sqlite3
*.db
Как создать .gitignore?
Способ 1: Вручную
# В корне проекта:
touch .gitignore
# Откройте в редакторе и добавьте:
node_modules/
.env
*.log
Способ 2: GitHub шаблоны
При создании репозитория выберите шаблон:
- Python
- Node
- Java
- и др.
Способ 3: gitignore.io
Сайт https://gitignore.io генерирует .gitignore
# Пример для Python + Django + VSCode:
curl https://www.toptal.com/developers/gitignore/api/python,django,vscode > .gitignore
Синтаксис .gitignore
Базовые правила
# Игнорировать файл
secret.txt
# Игнорировать папку
logs/
# Игнорировать все с расширением
*.log
# Игнорировать в любом месте
**/temp.txt
# НЕ игнорировать (исключение)
!important.log
Примеры паттернов
# Один конкретный файл
config.json
# Все .txt файлы
*.txt
# Все .txt в корне (не в подпапках)
/*.txt
# build папка везде
**/build/
# Игнорировать все кроме важного
*
!src/
!README.md
Комментарии
# Это комментарий
# Зависимости
node_modules/
vendor/
# Секреты
.env # файл с паролями
Шаблоны по языкам
Python
# Byte-compiled
__pycache__/
*.py[cod]
*$py.class
# Distribution
dist/
build/
*.egg-info/
# Virtual environment
venv/
ENV/
.venv/
# Django
*.log
db.sqlite3
media/
staticfiles/
# Flask
instance/
.webassets-cache
# Environment
.env
Node.js / JavaScript
# Dependencies
node_modules/
package-lock.json # опционально
# Build
dist/
build/
.next/
out/
# Logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Environment
.env
.env.local
.env.*.local
# Testing
coverage/
.nyc_output/
Java
# Compiled
*.class
*.jar
*.war
*.ear
# Build
target/
build/
out/
# IDE
.idea/
*.iml
.project
.settings/
# Logs
hs_err_pid*
.gitignore для всех проектов
# Универсальный .gitignore
# Зависимости
node_modules/
__pycache__/
vendor/
# Секреты
.env
.env.local
secrets.*
# Сборка
dist/
build/
*.exe
*.dll
# Логи
*.log
# OS
.DS_Store
Thumbs.db
*~
# IDE
.vscode/
.idea/
*.swp
# Временные
*.tmp
*.cache
Что делать если уже закоммитили?
Файл уже в Git
# 1. Добавьте в .gitignore
echo "node_modules/" >> .gitignore
# 2. Удалите из Git (но не с диска!)
git rm --cached node_modules/ -r
# 3. Закоммитьте
git commit -m "chore: remove node_modules from tracking"
# 4. Push
git push
--cached = удалить из Git, но НЕ с диска!
Секрет попал в Git 🚨
НЕМЕДЛЕННО:
- Смените пароль/ключ!
-
Удалите из Git истории:
bash git filter-branch --tree-filter 'rm -f .env' HEAD git push --force -
Используйте BFG Repo-Cleaner для больших файлов
Важно: Старые коммиты могут сохраниться в forks!
Глобальный .gitignore
Для всех ваших проектов:
# Создайте глобальный
touch ~/.gitignore_global
# Добавьте в него:
.DS_Store
.vscode/
*.swp
# Скажите Git использовать:
git config --global core.excludesfile ~/.gitignore_global
Теперь эти файлы игнорируются во ВСЕХ проектах!
Проверка .gitignore
Проверить игнорируется ли файл
git check-ignore -v node_modules/
# .gitignore:1:node_modules/ node_modules/
Посмотреть все игнорируемые
git status --ignored
Debug почему файл игнорируется
git check-ignore -v -n путь/к/файлу
Частые ошибки
❌ Забыли / в конце
node_modules # игнорирует файл "node_modules"
node_modules/ # игнорирует папку "node_modules/"
❌ Пробелы в начале/конце
.env # НЕ сработает (пробел в начале)
.env # Правильно
❌ Кодировка файла
- .gitignore должен быть в UTF-8
- Без BOM
Best Practices
✅ DO:
- Создавайте .gitignore в начале проекта
- Коммитьте .gitignore в репозиторий
- Используйте готовые шаблоны
- Документируйте комментариями
❌ DON’T:
- Не игнорируйте .gitignore сам!
- Не игнорируйте критичные конфиги
Заключение
.gitignore — это:
- 🛡️ Защита от случайных коммитов
- 🗜️ Лёгкий репозиторий
- 🔐 Безопасность секретов
- 📝 Чистая история
Создайте .gitignore СЕЙЧАС:
1. Скопируйте шаблон для вашего языка
2. Добавьте .env и другие секреты
3. Закоммитьте
4. Спите спокойно! 😴
💬 Comments (0)
No comments yet
Be the first to share your opinion about this article!