Установка мерзавца repo на моем GoDaddy, размещающем план

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

14
задан 16 June 2009 в 23:18
3 ответа

Я - и SF и godaddy n00b, поэтому терпите меня, но так или иначе, я очень рад видеть обсужденный здесь.

Просто мои 0,02$, я делал попытку мерзавца здания (динамично) на моем поле Linux, поливая из шланга его в мою учетную запись godaddy, и даже если, пытаясь просто продвинуть к в других отношениях пассивной godaddy машине, это перестало работать из-за пропавших без вести openssl. Возможно, если я пытаюсь создать мерзавца статически с openssl, но похоже на плохую идею также.

$ git remote add godaddy ssh://unclecj@sveningsson.info//home/content/u/n/c/unclecj/foo.git

$ git push godaddy master
bash: git-receive-pack: command not found
fatal: The remote end hung up unexpectedly

$ git push --receive-pack="/home/content/u/n/c/unclecj/opt/git-1.6.3/bin/git-receive-pack" godaddy master
/home/content/u/n/c/unclecj/opt/git-1.6.3/bin/git-receive-pack: error while loading shared libraries: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
fatal: The remote end hung up unexpectedly

Вне темы, но действительно ли это - вид отсутствия поддержки, которую я должен ожидать от godaddy, я должен сожалеть, что не выбрал dreamhosts вместо этого?

Главный судья наилучших пожеланий

PS. Не ответ, а предложение, чтобы однажды мерзавец - получили, работает над godaddy (это?), затем репозиторий с отдельным worktree является отличным способом развернуться для сети: http://toroid.org/ams/git-website-howto

2
ответ дан 2 December 2019 в 21:05

Самый легкий способ сделать это путем выполнения чего-то вроде этого на удаленном сервере:

mkdir repo.git
cd repo.git
git init --bare 

Затем на Вашем контроле дьявола:

git push --all ssh://<username>@<your server>/~/path/to/repo/relative/to/homedir/repo.git

Нет никакого сервера или чего-либо еще требуемого, и необходимо смочь выбрать/вытянуть от той машины, а также долго поскольку у Вас есть ssh доступ.

Если у Вас есть свой .ssh/config, настроенный также, он должен использовать в своих интересах это и использовать любые закрытые ключи, которые Вы, возможно, настроили.

Если Вы планируете выставление обновлений много, можно добавить удаленный repo к контролю дьявола:

git remote add godaddy ssh://<username>@<your server>/path/to/repo.git

Затем с тех пор Вы можете:

git push godaddy

Для большего количества информации проверьте документы онлайн о git push или выполненный git push --help запустить страницу справочника на Вашем локальном.

0
ответ дан 2 December 2019 в 21:05
  • 1
    It' s больше установка мерзавца на удаленном сервере that' s неприятный все же. Ваш ответ (пока полезный) просто касается создания репозитория стандартным способом. –  Tom Wright 17 June 2009 в 02:14
  • 2
    Ahh, я вижу. Я hadn' t мысль об этом. Вы смогли посылать godaddy' по электронной почте; s размещающий поддержку и видят, могут ли они установить мерзавца для Вас или по крайней мере абсолютный минимум deps, чтобы Вы создали его сами. В противном случае Вы смогли выяснять что архитектура it' s выполнение и компиляция Ваше собственное на подобном и загрузке это. –   17 June 2009 в 02:40

Я столкнулся с той же проблемой с сайтом, который я разместил на HostNine, совместно использованном, разместив пакет. Они также дают Вам ssh доступ, но они, к сожалению, не имеют git установленный и даже не предоставляют Вам доступ к выполненному gcc, создание его довольно трудный загрузить и установить мерзавца для Вашего пользователя.

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


Первая фигура, что имеет архитектура Ваш сервер. В моем случае это было 32-разрядным (i386). Вот несколько способов понять это:

# uname -a
Linux ___.myserverhosts.com 2.6.18-128.1.6.el5PAE #1 SMP Wed Apr 1 10:02:22 EDT 2009 i686 i686 i386 GNU/Linux

# file /bin/echo
/bin/echo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

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

Найти местоположение основного двоичного файла мерзавца:

> which git
/usr/local/bin/git

Некоторые другие важные двоичные файлы (как git-receive-pack) также находитесь в том же каталоге, таким образом, я рекомендую просто копировать по всему из /usr/local/bin/git* для проверки Вы получаете все, в чем Вы нуждаетесь.


Другие важные файлы - то, что мерзавец зависит от, находятся под 'libexec' каталогом где-нибудь в исходной системе. Если Вы не копируете их, можно получить удивительное сообщение об ошибке, когда Вы пытаетесь сделать a git push, как я сделал:

git: 'index-pack' is not a git-command. See 'git --help'.

Для нахождения каталога, содержащего базовые библиотеки мерзавца по target_host, можно использовать это:

> git --exec-path
/usr/local/libexec/git-core

Я рекомендовал бы копировать те файлы по первому и затем попытаться выполнить мерзавца, чтобы видеть, жалуется ли это на совместно использованные библиотеки пропавших без вести. Если это не делает, то Вы (по-видимому), хороши пойти. Если это делает, то продолжайте читать. (Бывший бесполезный, скопировав по общим библиотекам, если они уже существуют на целевом узле и являются правильной версией.)

Можно скопировать файлы с scp, rsync, ftp, или независимо от того, что Вы довольны. Я использовал scp, что-то вроде этого:

> ssh target_host 'mkdir -p ~/bin ~/libexec'
> scp /usr/local/bin/git* target_host:~/bin
> scp -r /usr/local/libexec/git-core target_host:~/libexec

Затем ssh к target_host. Необходимо будет добавить некоторые строки как они к Вашему ~/.bashrc:

export PATH=$PATH:~/bin
export LD_LIBRARY_PATH=~/lib
export GIT_EXEC_PATH=~/libexec/git-core

Если Вы забываете этот шаг, Вы можете быть удивлены видеть эту ошибку, когда Вы делаете a git push:

git-receive-pack: command not found

Это документируется на Мерзавце FAQ на git.or.cz:

В основном проблема состоит в том, что 'git-receive-pack' не находится в $PATH по умолчанию на удаленном конце.

...

  • Удостоверяясь у Вас есть корректный путь, созданный в .bashrc (не только .bash_profile)

GIT_EXEC_PATH документируется на man git:

   --exec-path
       Path to wherever your core git programs are installed. 
       This can also be controlled by setting the GIT_EXEC_PATH
       environment variable. If no path is given, git will print
       the current setting and then exit.

Получите свое новое ~/.bashrc. Теперь попытайтесь работать git.


Это - то, что это дало мне первый раз:

> git
git: error while loading shared libraries: libcrypto.so.4: cannot open shared object file: No such file or directory

Я смог выяснить местоположение общих библиотек для копирования путем выполнения этого на исходной машине:

> ldd /usr/local/bin/git
libz.so.1 => /usr/lib/libz.so.1 (0xb7fcf000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0xb7ee4000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7ed2000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7da6000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb7d92000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb7d2d000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7d2a000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7d08000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7cf5000)
libdl.so.2 => /lib/libdl.so.2 (0xb7cf1000)
/lib/ld-linux.so.2 (0xb7fe8000)

В моем случае я просто должен был скопировать /lib/libcrypto.so.4 к ~/lib на моем target_host и все было прекрасно.


Теперь у Вас должна быть работа git на Вашем общем хостинг-сервере и необходимо смочь продвинуть к нему!

Теперь необходимо или создать новый репозиторий мерзавца и дерево работы на сервере или скопировать существующее дерево репозитория/работы.


Между прочим, я не думаю, что пустой репозиторий - то, что Вы хотите на сервере в этом случае, так как Вы сказали, что хотели развернуть фактические файлы содержания (в противоположность просто config HEAD objects/ refs/ файлы, которые были бы включены в пустой репозиторий) каждый раз, когда Вы делаете a git push.

toolmantim.com объясняет различие между обычным репозиторием мерзавца и пустым репозиторием:

Репозиторий мерзавца по умолчанию предполагает, что Вы будете использовать его в качестве своего рабочего каталога, таким образом, мерзавец сохранит фактические пустые файлы хранилища в .git каталоге вместе со всеми файлами проекта. Удаленным репозиториям не нужны копии файлов в файловой системе в отличие от рабочих копий, все, в чем они нуждаются, дельты и двоичные этажерки самого репозитория. Это - то, что “пустой” значит для мерзавца. Просто сам репозиторий.


Я предположу в настоящий момент, что Вы уже создали каталог на Вашем target_host где Вы хотите развернуть свой веб-сайт (или независимо от того, что Вы развертываетесь). Давайте назовем тот каталог ~/www/my_site. Вы можете иметь даже ftp'd по всем Вашим файлам к ~/www/my_site already. (Имеете ли Вы, не важно.) я также предположу в настоящий момент, что Вы уже не скопировали .git подкаталог в ~/www/my_site (это должно работать просто великолепно, если Вы имеете хотя).

С тех пор уже нет репозитория мерзавца, инициализированного на target_host, Ваш первый шаг должен был бы создать тот:

> cd ~/www/my_site
> git init

Затем от того, какой бы ни хост имеет репозиторий с последними изменениями, которые Вы хотите развернуть (Ваше поле разработки, я предположил бы), просто необходимо сделать что-то вроде этого для развертывания:

> git push --all ssh://username@target_host:port/~/www/my_site/.git

Можно видеть предупреждение как это если репозиторий на target_host не уже актуально:

> warning: updating the current branch
> warning: Updating the currently checked out branch may cause confusion,
> warning: as the index and work tree do not reflect changes that are in HEAD.
> warning: As a result, you may see the changes you just pushed into it
> warning: reverted when you run 'git diff' over there, and you may want
> warning: to run 'git reset --hard' before starting to work to recover.
> warning: 
> warning: You can set 'receive.denyCurrentBranch' configuration variable to
> warning: 'refuse' in the remote repository to forbid pushing into its
> warning: current branch.
> warning: To allow pushing into the current branch, you can set it to 'ignore';
> warning: but this is not recommended unless you arranged to update its work
> warning: tree to match what you pushed in some other way.
> warning: 
> warning: To squelch this message, you can set it to 'warn'.
> warning: 
> warning: Note that the default will change in a future version of git
> warning: to refuse updating the current branch unless you have the
> warning: configuration variable set to either 'ignore' or 'warn'.

(В нормальном git использование Вы никогда не видите, что сообщение, я думаю, потому что Вы обычно продвигаете в пустые репозитории. Но так как наш удаленный репозиторий в этом случае является нормальным repo и с деревом работы и с индексом, git понятно обеспокоен, что это могло бы испортить что-то.)

Я думаю, что для нас безопасно установить его, чтобы 'проигнорировать' на Вашем сервере, тем не менее, потому что Вы вряд ли будете делать любые фиксации непосредственно в репозиторий там. (Все фиксации должны, вероятно, произойти в Вашем репозитории разработки и затем быть продвинуты к серверу.)

Так разрешение и набор это так Вы не будете видеть предупреждение каждый раз, когда Вы продвигаете:

> ssh target_host 'cd ~/www/my_site/; git config receive.denyCurrentBranch ignore'

push самостоятельно только обновляет индекс, однако, НЕ файлы в самом дереве работы. Обновление тех файлов является только видом всего смысла того, что мы пытаемся сделать, тем не менее, таким образом, наше задание не сделано, пока мы не говорим git выписать содержание индекса к самому дереву работы, как так:

> ssh target_host 'cd ~/www/my_site/; git reset --hard'

(Примечание: Любые изменения, которые Вы, возможно, имели в своем дереве работы на сервере, будут перезаписаны тем, что находится в репозитории.)

Я также следовал за предложением mattikus и создал удаленное для моего сервера:

> git remote add h9 ssh://username@target_host:port/~/www/my_site/.git

Таким образом, теперь все, что я должен сделать для развертывания:

> git push --all --force h9
> ssh remote_host 'cd ~/www/my_site/; git reset --hard'

Я даже пошел, насколько бросить эти команды в сценарий, я назвал script/deploy так любое время я хочу развернуться, у меня просто есть единственная команда для выполнения.

Сообщите мне, находите ли Вы какие-либо ошибки в этих инструкциях или если Вы знаете о лучшем решении.

23
ответ дан 2 December 2019 в 21:05

Теги

Похожие вопросы