Проще говоря, .gitkeep — это условный фиктивный файл. Его существование служит только одной цели: заставить Git отслеживать папку, которая в противном случае должна была бы быть пустой.
Почему это необходимо?
Логика дизайна Git заключается в «отслеживании изменений файлов», а не «отслеживании папок». Если ваш проект содержит пустую папку, Git полностью проигнорирует ее и не загрузит на GitHub или ваш сервер.
Это создает проблему: иногда вашему коду требуется наличие определенного каталога для работы, но вы не хотите загружать тестовые данные или временные файлы. Если каталог не существует, программа может сбойнуть.
Эти папки обычно:
logs/: Для лог-файловuploads/: Файлы, загруженные пользователямиtmp/: Временные файлыcache/: Данные кэша
Эти каталоги необходимы во время выполнения, их содержимое не должно быть закоммичено, но сама папка должна существовать.
Как это работает
Чтобы «обмануть» Git и заставить его сохранить эту папку, мы помещаем внутрь скрытый файл без реальной функции, заставляя Git думать: «О! Здесь что-то есть, мне нужно это записать».
Практическая аналогия:
Представьте, что вы строите дом (пишете проект):
| Файл | Описание |
|---|---|
.gitignore |
Как этикетка «Не выбрасывать», сообщающая уборщику (Git), какие вещи (например, просроченную еду, макулатуру) абсолютно не следует переносить в новый дом. |
.gitkeep |
Как «Коробка-заполнитель». Новый дом еще не обставлен, но вам нужно зарезервировать место для кладовой, поэтому вы ставите туда коробку, чтобы грузчики знали, что эта зона является частью дома и ее не следует сносить. |
Как использовать?
- Создайте файл с именем
.gitkeepвнутри пустой папки. - Содержимое файла может быть пустым, или вы можете написать «Keep this directory».
- Выполните
git addиcommitэтого файла.
Сравнение .gitkeep и .gitignore
| Характеристика | .gitkeep |
.gitignore |
|---|---|---|
| Официальный статус | Неофициальный (Просто соглашение сообщества) | Официальный (Встроенная функция Git) |
| Основная функция | Сохранить папку, не дать Git забыть о ней | Исключить файлы, не дать Git отслеживать их |
| Частые сценарии | Пустые папки логов, папки кэша | Файлы паролей, node_modules, временные файлы |
Практический совет: Нестандартное мышление
Хотя .gitkeep используется часто, на самом деле он не является официальной частью Git. Фактически, вы могли бы использовать README.md или .placeholder для достижения того же эффекта. Но почему все предпочитают .gitkeep? Потому что это говорит само за себя: «Этот файл ничего не делает, кроме как не дает Git удалить эту папку».
Если вы хотите выглядеть немного более профессионально, есть более креативный и функциональный подход, чем просто использование .gitkeep:
Поместите .gitignore в пустую папку со следующим содержимым:
# Игнорировать все в этом каталоге
*
# Но не игнорировать меня (сам этот файл .gitignore)
!.gitignore
Это гарантирует, что вы сохраните папку, при этом гарантируя, что мусорные файлы внутри никогда не будут случайно закоммичены. Это настоящий метод «защиты от дурака» (Foolproof).
Заключение
.gitkeep— это человеческий компромисс с логикой дизайна Git.- Это не официальная спецификация, но она стала стандартом де-факто для разработчиков.
- Что действительно важно, так это понимать, как работает
.gitignore;.gitkeep— это просто небольшой инструмент, помогающий Git «понимать» пустые папки.