У меня есть проект, который управляется версией с помощью git.
То, что я хочу сделать, это настроить репо на моем (совместно с ssh) пакете общего хостинга GoDaddy, чтобы я мог развертывать его одним нажатием, а не перетаскиванием по FTP.
Любые советы будут оценены. Лучше всего будет аккаунт от кого-то, кто уже сделал это, но я не мог лично найти в Интернете.
Ответы:
Я столкнулся с той же проблемой с сайтом, который я размещал в пакете хостинга HostNine. Они также предоставляют вам
ssh
доступ, но, к сожалению, они неgit
установлены и даже не дают вам доступа к запускуgcc
, что затрудняет загрузку и установку git для вашего пользователя.Единственный способ обойти эти ограничения - это скопировать двоичные файлы git с другого компьютера, на котором они были. Возможно, одно и то же решение подойдет вам и вашему общему хосту GoDaddy. Вот что я сделал:
Сначала выясните, какая архитектура у вашего сервера. В моем случае это был 32-битный (i386). Вот несколько способов понять это:
Затем вам нужно найти другой компьютер под управлением Linux с той же архитектурой и с установленным на нем git. Им даже не обязательно использовать один и тот же дистрибутив или версию Linux, если они имеют одинаковую архитектуру, и вы можете найти нужные вам двоичные файлы и библиотечные файлы.
Чтобы найти местоположение основного двоичного файла git:
Некоторые другие важные двоичные файлы (например
git-receive-pack
) также находятся в том же каталоге, поэтому я рекомендую просто скопировать все файлы,/usr/local/bin/git*
чтобы убедиться, что вы получите все, что вам нужно.Другие важные файлы, от которых зависит git, находятся в каталоге libexec где-то в исходной системе. Если вы не скопируете их, вы можете получить неожиданное сообщение об ошибке при попытке сделать
git push
, как я:Чтобы найти каталог, содержащий основные библиотеки git на target_host, вы можете использовать это:
Я бы порекомендовал сначала скопировать эти файлы, а затем попытаться запустить git, чтобы проверить, не жалуются ли они на какие-либо отсутствующие общие библиотеки. Если этого не произойдет, тогда вы (предположительно) готовы идти. Если это так, то продолжайте читать. (Не используйте копирование через общие библиотеки, если они уже существуют на целевом хосте и имеют правильную версию.)
Вы можете копировать файлы с
scp
,rsync
,ftp
или все , что вы комфортно. Я использовалscp
, что-то вроде этого:Затем SSH к target_host. Вам нужно будет добавить несколько строк, подобных этим
~/.bashrc
:Если вы забудете этот шаг, вы можете быть удивлены, увидев эту ошибку при выполнении
git push
:Это описано в Git FAQ на git.or.cz:
GIT_EXEC_PATH
задокументировано наman git
:Источник ваш новый
~/.bashrc
. Теперь попробуйте запуститьgit
.Это то, что он дал мне в первый раз:
Я смог выяснить расположение разделяемых библиотек для копирования, запустив это на исходном компьютере:
В моем случае я просто должен был скопировать
/lib/libcrypto.so.4
к~/lib
на моем ,target_host
и все было в порядке.Теперь у вас должна быть работа
git
на вашем сервере общего хостинга, и вы должны быть в состоянии подтолкнуть к нему!Теперь вам нужно либо создать новый репозиторий git и рабочее дерево на своем сервере, либо скопировать существующее хранилище / рабочее дерево.
Между прочим, я не думаю, что в этом случае на сервере вам нужно пустое хранилище, поскольку вы сказали, что хотите развернуть фактические файлы содержимого (а не только
config HEAD objects/ refs/
файлы, которые будут включены в пустое хранилище) всякий раз, когда вы делаетеgit push
.toolmantim.com объясняет разницу между обычным репозиторием git и пустым репозиторием:
На данный момент я предполагаю, что вы уже создали каталог в том месте,
target_host
где вы хотите развернуть свой веб-сайт (или все, что вы развертываете). Давайте назовем этот каталог~/www/my_site
. Вы можете иметь даже ftp'd для всех ваших файлов~/www/my_site already
. (Независимо от того, есть ли у вас или нет, это не важно.) Я также предполагаю, что на данный момент вы еще не скопировали в подкаталог .git~/www/my_site
(хотя это должно работать нормально).Поскольку на target_host нет инициализированного git-репозитория, первым шагом будет его создание:
Затем с любого хоста, у которого есть репозиторий с последними изменениями, которые вы хотите внедрить (я бы предположил, что это ваш блок разработки), вам просто нужно сделать что-то подобное для развертывания:
Такое предупреждение может появиться, если ваш репозиторий
target_host
не обновлен:(
git
Я думаю, что при обычном использовании вы никогда не видите это сообщение, потому что вы обычно отправляете в пустые репозитории. Но поскольку наш удаленный репозиторий в этом случае является обычным репозиторием с рабочим деревом и индексом,git
понятно, что он может испортить что-нибудь.)Я думаю, что для нас безопасно установить «игнорирование» на вашем сервере, потому что вы вряд ли будете делать какие-либо коммиты непосредственно в хранилище. (Вероятно, все коммиты должны исходить из вашего репозитория разработки, а затем отправляться на сервер.)
Так что продолжайте и установите это так, чтобы вы не увидели предупреждение при каждом нажатии:
Сам по
push
себе обновляет только индекс, но НЕ файлы в самом рабочем дереве. Тем не менее, обновление этих файлов - это всего лишь смысл всего, что мы пытаемся сделать, поэтому наша работа не будет завершена, пока мы не скажемgit
записать содержимое индекса в само дерево работы, например, так:(Примечание. Любые изменения, которые вы могли внести в свое рабочее дерево на сервере, будут перезаписаны содержимым репозитория.)
Я также последовал совету Маттикуса и создал пульт для своего сервера:
Теперь все, что мне нужно сделать, чтобы развернуть это:
Я даже дошел до того, что бросил эти команды в сценарий, который назвал,
script/deploy
поэтому в любое время, когда я хочу развернуть, у меня есть только одна команда для запуска.Пожалуйста, дайте мне знать, если вы найдете какие-либо ошибки в этих инструкциях или если вы знаете лучшее решение.
источник
Я и SF, и Godaddy N00B, так что терпите меня, но в любом случае, я очень рад, что это обсуждается здесь.
Всего за мои 0,02 доллара я попытался создать git (динамически) на своем linux box, перенеся его на свой аккаунт godaddy, и даже если попытался просто нажать на пассивную, иначе пассивную машину, он потерпел неудачу из-за отсутствия openssl. Может быть, если я попытаюсь создать git статически с openssl, но это тоже плохая идея.
Не по теме, но разве такого рода нехватка поддержки мне следует ожидать от godaddy, стоит ли мне сожалеть о том, что я не выбрал мечту вместо этого?
С наилучшими пожеланиями CJ
PS. Не ответ, а предположение, что если git-receive работает над godaddy (не так ли?), То репозиторий с отдельным рабочим деревом является отличным способом развертывания для веб-сайтов: http://toroid.org/ams/git- сайт-HOWTO
источник
Самый простой способ сделать это, запустив что-то вроде этого на вашем удаленном сервере:
Тогда на вашей кассе разработки:
Сервер или что-либо еще не требуется, и вы должны иметь возможность получать / извлекать данные с этой машины, а также при наличии доступа по ssh.
Если у вас также есть настроенный .ssh / config, он должен воспользоваться этим и использовать любые закрытые ключи, которые вы, возможно, настроили.
Если вы планируете много выпускать обновления, вы можете добавить удаленный репозиторий к вашей кассе devel:
Затем вы можете:
Для получения дополнительной информации, проверьте онлайн-документы
git push
или запустите,git push --help
чтобы запустить справочную страницу в вашем регионе.источник