2

私はGitだけに少し慣れていないので、簡単なセットアップで基本的なプロジェクトにしか使用していません。今、私はもっと複雑な設定に頭を悩ませるのに苦労しています。私は一晩中グーグルで起きていましたが、これをどのように設定したいかに関連するものは何も見つかりません。

ネットワーク上に3つのサーバーがあります。1つは開発用(dev.example.com)、もう1つは本番用(www.example.com)、もう1つは2つの間の中心的なステージとして機能します(central.example.com)。

ローカルマシン(3つのメインサーバーとは別ですが同じネットワーク上にあります)からプッシュできるメイン(おそらくベア)GitリポジトリをCentralに作成したいと思います。理想的には、このリポジトリにはマスターと開発の2つのブランチがあります。私のローカルマシンは、Centralでこのリポジトリのみを処理します。

Centralのdevブランチにプッシュすると、Centralはそれらの変更をDEVサーバーにプッシュする必要があります。同様に、マスターブランチへの変更はWWWにプッシュする必要があります。これを実現するには、コミット/更新フックを使用するのが最善の方法だと思います。

これは大まかに描かれた図です:

 Local
   |
 Central
  /   \
DEV   WWW

誰かが親切に私を正しい方向に向けてもらえますか?ありがとう!

4

2 に答える 2

3

使用post-updateまたはpost-receiveフックする必要があります。これらは、リポジトリへのプッシュが完了した後に実行されるものです。それらの唯一の違いは、引数を取得する方法です。

プロダクション/ステージング サーバーに ssh トリガーを使用することをお勧めします。そこからプルを実行します。理由は次のとおりです。

  • プッシュ イン git はプッシュされたバージョンをリモート エンドでチェックアウトすることをサポートしていないため、何らかのコードをそこで実行する必要があります。したがって、そこに別のフックが必要になります。
  • そこでプッシュを実行するということは、そこでプッシュ アクセスを許可することを意味し、それはもう 1 つセキュリティを確保する必要があることを意味します。一方、ssh トリガーには、プルするブランチがハードコーディングされているため、中央リポジトリも侵害されない限り、だれも害を及ぼすことはできません。 、ただし、データを削除することはできず、コンピューターの残りの部分にアクセスできなくなる可能性があります。

ssh トリガーは、ssh の特定の公開鍵に関連付けられているスクリプトです (公開鍵の前に.ssh/authorized_keystriggercommand=付けます)。そのキーを使用して ssh でログインすると、ssh はクライアントから提供されたコマンドを無視し、トリガーを実行します。これにより、トリガーが独自のロジックを使用して何をすべきかを認識し、クライアントからの入力を受け入れないため、誰かがキーを盗んだときに起こりうる損害が制限されます。

または、適切なフックをプッシュしてインストールし、チェックアウトすることもできます。この質問を参照してください。

于 2011-04-22T07:54:39.883 に答える
2

Gitでフックを設定して、ここで必要なものを簡単に取得できます。stdinから以下を受け取るpost-receiveフックを利用します。

<oldrev> <newrev> <refname>

例:

aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master

を使用するrefnameと、スクリプトでどのブランチがプッシュされているかを確認し、適切なリポジトリ(wwwまたはdev)にプッシュすることができます。

または、refnameのみpost-updateを受け取るフックを引数として使用 して、同じことを行うこともできます。

完全を期すために、フックは中央リポジトリのフックに配置する必要があります。

于 2011-04-22T09:37:56.757 に答える