LastPass. Таким образом, я не должен помнить загрузки учетных записей, которые я использую (и может генерировать очень сильные пароли для каждой из Ваших учетных записей), и персональный и на работе.
Я - и 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
Самый легкий способ сделать это путем выполнения чего-то вроде этого на удаленном сервере:
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
запустить страницу справочника на Вашем локальном.
Я столкнулся с той же проблемой с сайтом, который я разместил на 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
так любое время я хочу развернуться, у меня просто есть единственная команда для выполнения.
Сообщите мне, находите ли Вы какие-либо ошибки в этих инструкциях или если Вы знаете о лучшем решении.