2010-11-26 24 views
9

Gitリポジトリを(2台の)サーバ間で自動的に同期させる方法を探しています。Gitリポジトリを2台のサーバ間で同期させる方法

状況は次のとおりです。 私たちはすべてのプロジェクトでgitを頻繁に使用していますが、一部のリポジトリはかなり高速になります。現在、私たちには1台のセントラルサーバがあり、誰もがこのサーバとの間でプッシュ/プルインしています。しかし、これはすべてインターネット接続を経由するため、最速の方法ではありません。

アイデア: オフィスに別のサーバーを設置し、そこにすべてのgitリポジトリをオフィスで使用するようにします。このサーバーはオンラインで同期させる必要があります。 ユーザーは、DNSの調整によってどちらが使用されているか分からないため、オンラインサーバーリポジトリのアドレスは、そこにあるネットワークに接続すると、社内のアドレスに解決されます。

すでに誰かが同様のことをしていますか?あるいは、目標を達成するためのより簡単な方法があります。

+0

オフィス外の人はプッシュできる必要がありますか? – robert

+0

はい、できるだけ妥当な努力の中で – maxigs

答えて

4

、あなたは簡単にSSH forced commandメカニズムを拡張することができますので、私は、(gitoliteのようなフレームワークを意味することは、両方のLANレポとWANのhttpレポ上の所定の位置にある)、容易SSH protocolで行われ、このようなmechnismを参照してくださいになります。

  • 最初のチェックに2つのレポはローカルレポが必要
  • のリモート1と地元のレポを同期リモート1
  • よりも最新である場合
  • はコマンドを拒否している場合synchrone

hooksがより複雑になるとこれを行うには、すべての時点で、同期メカニズムを維持するために、慎重にサーバー側のフックの種類ごとに設定する必要があります。

+0

私は強制的なコマンドの記述をすばやく見ていましたが、これがどのように機能するのか分かりません。私がlan-repoに接続すると、forcedコマンドがチェックして、wan repoと同期する必要があるかどうかを確認し(必要に応じて)、リポジトリにプッシュを許可するだけですか?どのようにすればユーザーの視点から見えるのでしょうか? – maxigs

+0

@maxigs:アイデア(とgitoliteはそれを示しています)あなたが送るコマンドを(sshで)あなたのコマンドを検証するb /必要な場合はそのコマンドの前に実行するc /元のコマンドを実行するd /必要に応じてそのコマンドの後に何かを実行する。したがって、あなたのケースでは、a /(検証ステップ)は、サーバ側のリポジトリ(ssh強制コマンドが存在する)がプッシュが開始されたローカルリポジトリよりも最新ではないかどうかをチェックすることができます。 – VonC

0

ジトライトには、リポジトリを反映する機能があります。あなたはマスターのオフィスとスレーブのオンラインのオフィスの中の1つをセットアップし、いずれかにプッシュすることができます。

関連する問題