2011-07-30 6 views
0

私は現在、GITポスト受信フックを使用して次のシナリオを達成する方法について調査中です。GITフックポスト受信とリモートリポジトリgit pull

私は3つのリモートリポジトリを別々のリモートサーバーに置いています。

サーバA、サーバBとサーバC

私はサーバーAに私の仕事をプッシュすると、自動的に更新をサーバーBとCからGITプルを実行するために、サーバーA上のポスト受けるフックを使用それらのリポジトリも同時に使用できます。

ローカルコンピュータでこのシナリオを既にテストしていますが、同じコンピュータに3つの異なるリポジトリを作成して、3つのリモートサーバーリポジトリを模倣します。これまでのところうまくいきますが、このアイデアをリモートリポジトリに適用するとかなり難しいです。

このシナリオを達成する方法を知っている人がいるのか、この人に考えや経験があるのか​​不思議でした。

お手数をおかけします。

おかげ Finau

答えて

9

私が正しくあなたの質問を読んでいる場合、Server BServer Cの唯一の目的は、右、バックアップServer Aにありますか?その場合

、あなたの代わりにBCAからプッシュし、AからpullからServer BServer Cを伝える必要はありません。だからあなたのポスト受けるフックの内容はserver_bserver_cA上のリモコンを知られていると仮定し

git push --mirror server_b 
git push --mirror server_c 

だろう。 --mirrorフラグの説明については、git pushのドキュメントを参照してください。

あなたはBCがアクティブな部分になりたい場合は、定期的にgit fetch Aにcronジョブを設定。


別のアプローチは、3つのURL持っているあなたのローカルレポでリモートを定義することです:あなたは通常git pushを使用してAにあなたの仕事を押すと、今

[remote "multi"] 
url = server_a/repo.git 
url = server_b/repo.git 
url = server_c/repo.git 

を、単に

git push --mirror multi 
を行います

AB、およびCのすべてのローカルを同時にプッシュする


もう一つ質問です:なぜあなたはまったくBCにプッシュしていますか?あなたがバックアップの理由からそれをやっているようです。すべてのレポ(作業コピー、Aのいずれか、...)に開発の完全な履歴が含まれていることをご存知ですか?一つの中心的な歴史を持つSVNのようなものではありません。 GitはDVCSであり、すべての作業コピーは完全な履歴を持っています。

Gitを使って、すべて reposが同時に破壊された場合、履歴は失われます。それ以外の場合は、プロジェクト履歴を含むレポが常に1つ以上表示されます。それに関するいくつかの注意については、Pro Gitの導入の章を参照してください。

+0

こんにちは、あなたの提案は素晴らしいです!これは私が探していたものです。とてもおかげさまで、ありがとうございました。あなたの質問について "別の質問は、なぜあなたはBとCに何を押しつけるのですか?"私はクラウドサーバとロードバランサで働いています。サーバーA、B、Cサーバーは同じWebサイトのコンテンツです。 – Finau