Как заставить git НЕ заменять содержимое папки?

Я размещаю свой проект php на cloudcontrol.com, в моем проекте у меня есть статическая папка, в которой я сохраняю изображения профиля пользователя, например:

uploads/profile/userpic1.jpg
uploads/profile/userpic2.jpg
uploads/profile/userpic2.jpg

Я .gitignore все файлы в папке профиля с файлом .gitignore:

*
!.gitignore

в моем локальном окружении, когда я делаю некоторые тесты, я загружаю некоторые фотографии в эту папку.
В моей производственной среде пользователи также меняют свои профильные изображения и сохраняют их в этой папке.

Моя проблема:

Всякий раз, когда я помещаю какие-либо обновления на рабочий сервер, я теряю все файлы в каталоге профиля на сервере !!
Похоже, git (или cloudcontrol) ЗАМЕНИТЕ каталог профиля, а не просто обновит его содержимое, не затрагивая старые файлы / картинки.

Любой совет, как я могу это исправить. Я думал, что это просто проблема .gitignore, и я сделал все, чтобы сделать эту работу, но я не мог. Я новичок в Git и PaaS.

Спасибо

0

Решение

cloudControl, как и большинство хостеров облачных приложений, при развертывании заменяет полную папку приложения. Обычно это делается для обеспечения горизонтального масштабирования и обеспечения того, чтобы каждое развертывание основывалось на одном и том же (пустом) состоянии.

Смотрите также документацию по непостоянная файловая система:

Непостоянная файловая система

TL; DR:

  • Каждый контейнер имеет свою собственную файловую систему.
  • Файловая система не является постоянной.
  • Не храните загружаемые файлы в файловой системе.

Развертывания на платформе cloudControl имеют доступ к доступной для записи файловой системе. Эта файловая система, однако, не является постоянной. Записанные данные могут или не могут быть снова доступны в будущих запросах, в зависимости от того, как уровень маршрутизации направляет запросы через доступные контейнеры и удаляется после каждого развертывания. Это включает в себя развертывание, которое вы запускаете вручную, а также повторное развертывание, выполненное самой платформой во время нормальной работы.

Для загрузки клиентом (например, изображения профиля пользователя) мы рекомендуем хранилища объектов, такие как Amazon S3 или функция GridFS, доступная как часть MongoLab Add-on.

Так что если вы хотите хранить файлы динамически, вам придется искать отдельное решение для этого.

3

Другие решения

Вот как работает большинство приложений для развертывания, использующих git. В любом случае, git не лучше всего подходит для управления версиями, его следует использовать в основном для кода. Сказав это, вы все еще можете использовать .gitignore до тех пор, пока у вас есть четкий идентификатор между контентом, который вы хотите версировать, и тем, который вы не хотите версировать. Скажите, что все ваши собственные файлы начинаются со слова version вы можете сделать что-то вроде этого

/public/assets/images/users/*
!/public/assets/images/users/version*
0