gitを使用してバージョン管理されているプロジェクトがあります。
できるようにしたいのは、FTPでドラッグアンドドロップするのではなくプッシュでデプロイできるように、(ssh対応の)GoDaddy共有ホスティングパッケージにリポジトリを設定することです。
任意のヒントをいただければ幸いです。最善の方法は、既にそれを行った人のアカウントですが、個人的にはオンラインで見つけることができませんでした。
gitを使用してバージョン管理されているプロジェクトがあります。
できるようにしたいのは、FTPでドラッグアンドドロップするのではなくプッシュでデプロイできるように、(ssh対応の)GoDaddy共有ホスティングパッケージにリポジトリを設定することです。
任意のヒントをいただければ幸いです。最善の方法は、既にそれを行った人のアカウントですが、個人的にはオンラインで見つけることができませんでした。
回答:
HostNine共有ホスティングパッケージでホストしていたサイトで同じ問題に遭遇しました。これらもssh
アクセスを許可しますが、残念ながらgit
インストールされておらず、実行するためのアクセスさえ許可されていないgcc
ため、ユーザーのgitをダウンロードしてインストールするのはかなり困難です。
これらの制限を回避するために考えることができる唯一の方法は、それらを持っている別のコンピューターからgitバイナリーをコピーすることでした。おそらく、同じソリューションがあなたと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
次に、同じアーキテクチャでgitがインストールされているLinuxを実行している別のコンピューターを見つける必要があります。同じアーキテクチャであり、必要なバイナリとライブラリファイルを見つけられる限り、同じディストリビューションまたはバージョンのLinuxを実行する必要はありません。
メインgitバイナリの場所を見つけるには:
> which git
/usr/local/bin/git
他の重要なバイナリ(などgit-receive-pack
)も同じディレクトリにあるため、すべてをコピーして、/usr/local/bin/git*
必要なものがすべて揃っていることを確認することをお勧めします。
他の重要なファイルは、gitが依存していることは、ソースシステム上の「libexec」ディレクトリの下にあります。これらをコピーしないとgit push
、私がやったようにを実行しようとすると、驚くべきエラーメッセージが表示される場合があります。
git: 'index-pack' is not a git-command. See 'git --help'.
target_hostでコアgitライブラリを含むディレクトリを見つけるには、これを使用できます。
> git --exec-path
/usr/local/libexec/git-core
最初にこれらのファイルをコピーしてから、gitを実行して、欠落している共有ライブラリについて文句を言うかどうかを確認することをお勧めします。そうでない場合は、(おそらく)行ってもいいです。もしそうなら、読み続けてください。(共有ライブラリがターゲットホスト上に既に存在し、正しいバージョンである場合、共有ライブラリをコピーすることはできません。)
あなたはしてファイルをコピーすることができ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
この手順を忘れた場合、次の操作を行ったときにこのエラーが表示されることに驚くかもしれませんgit push
。
git-receive-pack: command not found
これは、git.or.czのGit FAQに記載されています。
基本的に問題は、「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
で、共有ホスティングサーバーでの作業が完了し、プッシュできるようになります。
次に、サーバーで新しいgitリポジトリと作業ツリーを作成するか、既存のリポジトリ/作業ツリーをコピーする必要があります。
ところで、私はあなたが実際のコンテンツファイルを展開したいと言ったので(この場合config HEAD objects/ refs/
、裸のリポジトリに含まれるファイルだけで はなく)、裸のリポジトリがあなたのサーバーに欲しいとは思わないあなたがしgit push
ます。
toolmantim.comは、通常のgitリポジトリとベアリポジトリの違いについて説明しています。
デフォルトのgitリポジトリは、作業ディレクトリとして使用することを想定しているため、gitはすべてのプロジェクトファイルとともに.gitディレクトリに実際のベアリポジトリファイルを保存します。リモートリポジトリは、作業コピーとは異なり、ファイルシステム上のファイルのコピーを必要としません。必要なのは、リポジトリ自体のデルタとバイナリwhat-notsです。これがgitの「裸」の意味です。リポジトリそのもの。
ここではtarget_host
、Webサイトを展開する場所(または展開するもの)にディレクトリを既に作成していると仮定します。そのディレクトリを呼び出しましょう~/www/my_site
。すべてのファイルをにFTPで転送している場合もあります~/www/my_site already
。(あなたが持っているかどうかは重要ではありません。)また、.gitサブディレクトリをまだコピーしていないと仮定します~/www/my_site
(もしあれば、うまくいくはずです)。
target_hostで初期化されたgitリポジトリはまだないので、最初のステップは作成することです:
> 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
使用法では、あなたは通常、裸のリポジトリにプッシュしているため、そのメッセージは表示されません。しかし、この場合のリモートリポジトリは、作業ツリーとインデックスの両方を持つ通常のリポジトリで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
、展開したいときはいつでも実行するコマンドが1つだけあります。
これらの指示に誤りを見つけた場合、またはより良い解決策を知っている場合はお知らせください。
私はSFとgodaddy n00bの両方なので、我慢してください、とにかく、ここで議論されていることをとてもうれしく思います。
ちょうど0.02ドルで、Linuxボックスでgitを(動的に)ビルドしてgodaddyアカウントに移動しました。それ以外の場合は受動的なgodaddyマシンに単にプッシュしようとしても、opensslが見つからないため失敗します。たぶん、opensslで静的にgitをビルドしようとすると、それも悪い考えのように感じます。
$ 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を選択しないことを後悔すべきでしょうか?
よろしくCJ
PS。答えではありませんが、git-receiveがgodaddyで動作している(そうですか?)という提案は、分離されたワークツリーを持つリポジトリがWebにデプロイするのに最適な方法です: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も設定している場合は、それを利用して、設定した秘密キーを使用する必要があります。
更新を頻繁にプッシュする予定がある場合は、devel checkoutにリモートリポジトリを追加できます。
git remote add godaddy ssh://<username>@<your server>/path/to/repo.git
その後、次のことができます。
git push godaddy
詳細情報については、チェックアウトするオンライン上のドキュメントgit push
または実行をgit push --help
、ローカル上のmanページを起動します。