2011-11-10 12 views
0

私の最初のgitフックを書こうとしています。私は遠隔の起源を持っています。私はそれをプッシュすると、ポスト受信フックを起動してライブサーバーとgit pullにsshします。これはできますか?それは良いアプローチですか?git post-receive hookはsshとgit経由でリモートに接続します。

私はフックを発射しており、ライブサーバーはgit pullを行っていますが、それはすでに最新のものですか?何か案は?

答えて

0

確かに実行できますが、これは最善の方法ではありません。 git pullを使用すると、gitがフェッチして作業コピーにマージします。そのマージが常に早送りであることが保証されていれば問題ありませんが、それ以外の場合はライブサーバー上のデプロイされたコードで解決される可能性があります。プルでデプロイする際のもう1つの問題は、プルがあなたのブランチが既に最新であることを伝えるだけなので、履歴の前のコミットに戻ることができないことです。

さらに、ライブサーバーの非ベアリポジトリにアクセスする場合は、.gitディレクトリのデータが一般公開されないようにする必要があります。

git checkout -fを使用しますが、作業ディレクトリをコードの配備先ディレクトリに設定して、ライブサーバーのベアリポジトリにフック経由で展開する方法もあります。そのようなシステムを設定するためのステップバイステップのガイドhereを見つけることができます。

+0

なぜこれが良い方法ではないのか分かりません。プルが自動であれば、ライブサイトの作業コピーにどのような矛盾が生じますか?さらに、管理しているライブサイトごとに別の裸のコピーを作成することは、不要な管理オーバーヘッドのように思えます。 –

+0

各プルが前の 'HEAD'の状態からの早送りの場合、そのような競合は発生しません。しかし、必ずしもそうであるとは限りません。開発の分岐点からバージョンを展開したい場合があります。さらに重要なことは、同じブランチで古いコミットに戻したい場合、プルは同じ状態にして、あなたがすでに最新であることを伝えます。 –

+0

私のセットアップでは、私のローカルマシンは私のリモートサーバにsshすることができます。私はライブとdevの2つの支店を持っています。私はそれが元のサーバーにデベロッパーがビルドするアップデートをorigin devにプッシュすると、それをライブサーバーにデプロイするライブブランチにプッシュするときにそれを望みます。誰も私が勉強することができるsimlarポスト受信フックスクリプトを持っていますか? – user1039523

4

はい、それは可能ですし、はい、私の意見では、それは良い練習です。ここに私たちのユースケースがあります: 私は小さなグループで働き、さまざまな人々のグループのためにいくつかのサイトを管理しています。

各サイトには、すべての開発者のためのサンドボックスであるステージング、ライブになる前にコンテンツ所有者の変更を示すステージング、新しいコンテンツマネージャのトレーニングに使用するトレーニング、誰もがコンテンツを消費するようになっています)。

これらのすべての環境への配備は、ブランチ名に基づいてポスト受信フックによって制御されます。どこにでもデプロイされない「ホットフィックス」ブランチがあるかもしれませんが、「ベータ」ブランチとマージするとベータ版サーバーに自動的にデプロイされ、コードがどのように相互作用するかをテストできます他の開発者のコ​​ードに置き換えてください。

これを行うにはさまざまな方法がありますが、gitサーバがWebサーバにsshでgit pullを実行できるようにssh鍵を設定します。これは、git @ gitserverの公開鍵をgit @ webserverのauthorized_keysファイルに追加することを意味し、逆も同様です。ポスト受信フックでは、ブランチを解析し、そのための 'case'ステートメントを作成します。

希望します。

+0

私は後でこのスクリプトを試してみるつもりです。 – user1039523

関連する問題