Мерзкие и пустые папки
Итак, я вижу, что Git не распознает папки, или я должен сказать, что единственное изменение между коммитами - это добавление пустых папок в рабочее дерево, в котором они не отображаются git status
после git add .
,
Как бы вы справились с необходимостью добавления пустых папок в рабочее дерево (для хранения во время выполнения) и их отображения / создания, когда другие хранилища извлекают данные из текущего хранилища (того, в которое были добавлены папки)?
9 ответов
Люди часто помещают пустой файл в качестве заполнителя в папку, чтобы преодолеть это ограничение...
Я обычно ставлю .gitignore
в этих каталогах, так как вы, вероятно, хотите игнорировать любые сгенерированные во время выполнения данные.
Вы абсолютно правы. Git, как и некоторые другие системы контроля версий, не учитывает пустые папки или свойства папок. Папки существуют только в том случае, если в них есть файл. Если вы хотите смоделировать это, вам нужно поместить в них файлы-заполнители.
Вы должны понимать, что вы просите, чтобы ваша система управления исходным кодом настроила некоторые ресурсы, которые не являются источником, не являются частью вашей системы сборки, но необходимы для работы вашего приложения. Я бы сделал одно из следующего:
- Сделайте сборку, создайте необходимую директорию.
- Пусть приложение создает необходимые каталоги во время работы.
Точно так же, если приложение хочет добавить файл журнала, не имеет смысла запускать этот файл журнала в системе контроля версий, не так ли?
Либо поместите пустые файлы-заполнители в папки, которые вы хотите, чтобы git отслеживал, либо добавьте инструкции для создания этих папок в вашей системе сборки, если это возможно.
Я также сталкиваюсь с той же проблемой. Я думаю, это связано с тем, как Git отслеживает изменения. Он не отслеживает файлы, а скорее его содержимое. При отображении изменений, фиксации или регистрации он отображает изменения в определенных файлах и показывает изменения в отдельных файлах. Посмотрите это видео для получения более подробной информации. Tech Talk: Линус Торвальдс о git Linus, в частности, приводит пример о переносе функции из одного файла в другой и о том, как git может отслеживать изменения.
Для Linux/MAC OSX используйте следующую однострочную команду, чтобы рекурсивно создавать/помещать пустые файлы-заполнители в папки, чтобы предотвратить их игнорирование с помощью git:
find . -type d -empty -not -path "./.git/*" -exec touch {}/.gitkeep \;
Надеюсь, это кому-то поможет.
Я столкнулся с этой проблемой при попытке использовать git в качестве инструмента резервного копирования с поддержкой дедупликации и сжатия.
Моим решением было создать мою собственную систему. Это доступно на http://github.com/meingbg/store
Опять же, моей целью было хранить файлы, а не работать с кодом.