GoDaddyホスティングプランでGitリポジトリを設定する


14

gitを使用してバージョン管理されているプロジェクトがあります。

できるようにしたいのは、FTPでドラッグアンドドロップするのではなくプッシュでデプロイできるように、(ssh対応の)GoDaddy共有ホスティングパッケージにリポジトリを設定することです。

任意のヒントをいただければ幸いです。最善の方法は、既にそれを行った人のアカウントですが、個人的にはオンラインで見つけることができませんでした。


StackOverflow
mrTomahawk 2009年

ええ、それは二人の間の投げでした。クロスポストしてみてください。ありがとう。
トム・ライト

まだGitリポジトリを設定しているわけではありませんが、ソースコードサーバープログラミングの設定はどのように関連していますか?-私の投票は明らかに
サーバー障害

1
おそらくそうではありませんが、開発者は私たちにそれを設定することを信頼する可能性が低いため、それについて知っています。
tomjedrz

1
確かなことはtomjedrz、および完全性のために:stackoverflow.com/questions/1003885/...
トム・ライト

回答:


23

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を実行して、欠落している共有ライブラリについて文句を言うかどうかを確認することをお勧めします。そうでない場合は、(おそらく)行ってもいいです。もしそうなら、読み続けてください。(共有ライブラリがターゲットホスト上に既に存在し、正しいバージョンである場合、共有ライブラリをコピーすることはできません。)

あなたはしてファイルをコピーすることができscprsyncftp、または何でもあなたが慣れています。私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つだけあります。

これらの指示に誤りを見つけた場合、またはより良い解決策を知っている場合はお知らせください。


すごい!可能であれば、努力して+10にしたいと思います。
icc97

2

私は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


0

これを行う最も簡単な方法は、リモートサーバーで次のようなものを実行することです。

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ページを起動します。


1
しかし、面倒なのはリモートサーバーへのgitのインストールです。答えは(有用ではありますが)、標準的な方法でリポジトリを作成することだけです。
トム・ライト

1
ええ、わかりました。私はそれを考えていませんでした。godaddyのホスティングサポートにメールを送信して、彼らがgitをインストールできるかどうか、または少なくとも自分でビルドするための最低限の依存関係を確認できる場合があります。そうでない場合は、どのアーキテクチャが実行されているかを把握し、同様のアーキテクチャで独自のアーキテクチャをコンパイルしてアップロードできる場合があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.