Поскольку Git не знает папок, только файлы, пустые структуры папок не попадают в репозиторий. Однако, поскольку многим фреймворкам и проектам это абсолютно необходимо, они должны там оказаться. Распространенной практикой является создание так называемых файлов-заполнителей (часто называемых .gitkeep), которые неявно определяют структуру папок. Эти файлы можно легко создать и, при желании, также обеспечить игнорирование других файлов в папках.
Сначала мы создаем тестовый репозиторий и создаем несколько подпапок:
434e6616f335599d241482f169f68f1b
Теперь у нас есть следующая структура папок:
434e6616f335599d241482f169f68f1b
Как и ожидалось, git status -u не показывает нам никаких изменений:
Теперь мы будем использовать find для создания файлов-заполнителей во всех необходимых местах.:
434e6616f335599d241482f169f68f1b
Теперь мы получили следующую структуру папок / файлов:
434e6616f335599d241482f169f68f1b
Теперь git status -u показывает нам, что все папки (неявно) попадают в репозиторий.:
Если теперь мы хотим убедиться, что структура папок всегда заканчивается в репозитории, но не какие-либо файлы (кроме файлов-заполнителей), мы создаем gitignore:
434e6616f335599d241482f169f68f1b
Мы используем Синтаксис двойной звезды:
434e6616f335599d241482f169f68f1b
Первая строка рекурсивно игнорирует все файлы и папки (на любом уровне) в папке "foo", вторая строка рекурсивно исключает все папки из этого правила (на любом уровне), а третья строка исключает все файлы .gitkeep (на любом уровне) .
Теперь создадим несколько тестовых файлов:
434e6616f335599d241482f169f68f1b
Теперь git status -u показывает желаемый результат: