git push удаляет неотслеживаемые удаленные файлы

Я запускаю веб-сервер, который позволяет пользователям загружать изображения на сервер. Однако я использую git для управления своим исходным кодом, а операция git push удаляет с сервера все, что не соответствует моей локальной проверке, поэтому я теряю изображения каждый раз, когда запускаю git push!

Сначала я подумал, что смогу защитить папку загрузки, поэтому я попробовал все эти вещи, как предлагалось в других сообщениях:

  • добавление каталога в .gitignore,
  • git rm --cached -r uploads
  • git update-index --assume-unchanged uploads

Ни один из них не решает проблему - удаленный каталог всегда исчезает, когда я делаю git push.

Далее я решил вынести загруженные файлы за пределы рабочей области git, чтобы git push не удалил его. Затем я создал символическую ссылку из общедоступного каталога в частный каталог, чтобы я мог просматривать файлы публично. Пока все хорошо... Однако всякий раз, когда я запускаю git push, символическая ссылка удаляется!

Наконец, я подумал, что, возможно, я мог бы использовать git-хук post-receive для создания символической ссылки каждый раз, когда я нажимаю, но мой веб-сервер (openshift) уже использует этот хук для чего-то другого и выиграл. т позволить мне редактировать его.

Наверняка есть простой способ сделать это?! Пожалуйста помоги!


person IanS    schedule 05.02.2015    source источник
comment
Вы должны зафиксировать перед нажатием.   -  person Antony D'Andrea    schedule 05.02.2015
comment
Да, очевидно, но файлы, созданные на сервере, никогда не попадают в мой рабочий каталог для фиксации.   -  person IanS    schedule 06.02.2015


Ответы (3)


Вы должны создать символические ссылки в OPENSHIFT_DATA_DIR, используя хук развертывания, вы можете просмотреть пример того, как это сделать, в кратком руководстве по WordPress здесь: https://github.com/openshift/wordpress-example/blob/master/.openshift/action_hooks/deploy

OPENSHIFT_DATA_DIR сохраняется между развертываниями, но НЕ используется совместно между шестернями в масштабируемом приложении.

person Community    schedule 05.02.2015
comment
Ах, я смотрел только на крючки GIT, я не знал о крючках действия openshift. Это должно решить мою проблему. Спасибо! - person IanS; 06.02.2015

Как и большинство поставщиков платформы как услуги, OpenShift развертывает совершенно новую версию вашего приложения каждый раз, когда вы push. По умолчанию все, что не отслеживается Git, не будет включено в новую версию.

У вас есть несколько вариантов:

  1. #P3#
    #P4# #P5# #P6# #P7# #P8# #P9#
  2. Храните сгенерированные/загруженные активы в другом месте.

    Это подход, который предпочитают поставщики PaaS, такие как Heroku. Вместо того, чтобы хранить загрузки пользователей и другой сгенерированный контент на сервере PaaS, сохраните его на чем-то вроде Amazon S3.

person Chris    schedule 05.02.2015
comment
Спасибо. В своем посте я объясняю, что могу хранить файлы «за пределами рабочей области git». Я действительно использую $OPENSHIFT_DATA_DIR. Однако моя проблема в том, что изображения, хранящиеся там, не являются общедоступными, поэтому я не могу отображать их на своем сайте. - person IanS; 06.02.2015

Да, репозиторий git, который вы отправляете, не должен быть репозиторием с рабочим каталогом. Это должен быть репозиторий bare, который инициируется с помощью

git --bare init

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

person Madara's Ghost    schedule 05.02.2015