Предположим, что вы хотите полностью изменить структуру каталогов вашей кодовой базы.
Вы хотите переместить некоторые папки выше, некоторые – ниже, а также переместить большое количество файлов в новые папки, которые вы собираетесь создать.
Вы начинаете перемещать код, параллельно проверяя, все ли работает, и добавляете несколько папок, которые вам пригодятся в следующем проекте.
На данный момент эти папки пустые. Вы все равно начнете следующий проект через пару дней, так что будет лучше, если вы добавите эти новые папки, раз уж вы начали перемещать кодовую базу.
Вы добавляете все это в свою ветку проекта, и вы готовы к тому, что кто-то это протестирует. Так что вы сообщаете тем, кто будет инспектировать код, что вы закончили работу со Slack.
После чего они клонируют вашу ветку, но проверка вашего кода заканчивается провалом, так как вы забыли добавить все новые папки, которые должны были добавить.
Подожите… что?
Что же случилось?
Git не может добавлять пустые каталоги. Он может лишь отслеживать файлы.
Если вы попробуете добавить пустую папку, в вашу ветку она не попадет, несмотря на то, что эта папка будет существовать на вашем локальном компьютере.
Именно поэтому, если кто-то попробует клонировать ваш код, он не получит ту же структуру папок, которая имеется на вашем локальном компьютере.
Итак, что же делать, если такой вариант не работает?
Как использовать .gitkeep?
Так вот, мы знаем, что Git отслеживает только файлы, поэтому нам нужно добавить что-то в папку.
Вы можете добавить что угодно. Все, что от вас требуется, это просто добавить какой-то фиктивный файл для того, чтобы быть уверенным в том, что папка отслеживается и может быть добавлена.
Вы можете просто скопировать и вставить пустой текстовый файл file.txt, и это сработает. Вы можете даже добавить туда изображение котика.
И тем не менее, существует довольно распространенная типовая практика для решения этой проблемы. Она заключается в том, что вам необходимо поместить в ваши пустые папки файл с именем .gitkeep.
Это не какая-то особенная функция Git! Вы можете назвать этот файл как вам угодно. Нет ничего особенного в названии .gitkeep. Некоторые разработчики, например, вместо этого файла добавляют .gitignore.
Правда, название .gitignore может создать путаницу, так как вы не пытаетесь заставить Git игнорировать ваш файл, а просто добавляете его в свою ветку.
Так или иначе, добавив этот обычный файл в свои папки, вы сможете гарантировать, что, когда придет время, вы сможете добавить эти папки в свою ветку проекта.
Заключение
.gitkeep - это довольно распространенная вещь, которую можно наблюдать в кодовых базах, где Git должен отслеживать пустую папку.
Имя вашего фиктивного файла не обязательно должно быть .gitkeep, но вы, как разработчик, будете постоянно сталкиваться именно с этим названием.