0

2 つの企業 A と B はどちらも、中央リポジトリで git を使用して、ソース コードに関するプロジェクト wiki、ドキュメントなどを許可しています。両方が共通の親組織によって所有されているとしましょう。

両社のユーザーは、コミットを自社内の他のユーザーまたは中央サーバーにのみプッシュできます。

2 つの中央サーバー間のネットワーク ルートを開き、各プロジェクトを (ルールセットに基づいて、.exportable と呼ばれる最上位ファイルと同じくらい単純に) 両方のサーバー間で複製することによって、この状況を拡張することは可能ですか? 開発者はそれぞれの側でコミットできる必要があり、単純にミラーになることはできません。

可能であれば、コミットを受け入れる各マスターは、コミットが入り、ロックし、他のマスターに手を差し伸べ、ロックし、コミットすることを確認し、遠端からコミットしてロックを削除する必要があると思います(これシナリオは 2 社以上に及ぶ可能性が高い)。

私がすでに想像できるあらゆる種類の問題があります。しかし、これは可能ですか、どのように、例はありますか?

編集:おそらく、プロジェクトは名前空間化され、マスターは独自のプロジェクトをホストし、所有していないプロジェクトのために他のマスターにプロキシすることができますか?

4

2 に答える 2

0

Gitoliteは、「リダイレクトされたプッシュ」と呼ばれるものでこれをサポートしています。

通常、マスター(およびマスターのみ)はスレーブにプッシュし、スレーブはユーザーに対して「読み取り専用」です。Gitoliteを使用すると、スレーブはユーザーからのプッシュを受信し、それらをマスターに透過的にリダイレクトできます。

これにより、複雑なセットアップのユーザーの作業が簡素化され、すべてのリポジトリへのフェッチアクセスとプッシュアクセスの両方にローカルミラーを使用できるようになります。

http://sitaramc.github.com/gitolite/mirroring.html

于 2012-11-11T19:36:13.823 に答える
0

あなたが説明していることを正確に達成できるかどうかはわかりませんが、確かにこれはかなり複雑になります。

より簡単な解決策が 1 つあります。git リポジトリを持つ 1 つのマスター サーバーを「マスター」として使用し、2 つ目のマスター サーバーを「バックアップ/スレーブ」として使用します。スレーブはマスターと同期できます(rsyncなどを使用できます)。このシナリオでは、スレーブへのプッシュを禁止する必要があります (プッシュはマスターに対してのみ可能です)。これにより、まったく同じ内容の 2 つのリポジトリが提供されます (スレーブは定期的にマスターから変更を取得するため)。

この場合、フェッチ (そしてもちろんプル) はマスターとスレーブの両方から可能になります。また、マスターとスレーブの両方からリポジトリのクローンを作成することもできます。

プッシュする前に (オリジン リポジトリがスレーブであると仮定すると、コマンド git remote add を使用して 2 番目のマスター リポジトリを追加する必要があります)。

つまり、一言で言えば:

  • プル、フェッチ、クローンできるマスターリポジトリとスレーブリポジトリがあります


  • 両方(プロジェクトに取り組んでいる多くの開発者がいる場合、クローン作成とフェッチはプッシュよりもはるかに頻繁に行われるため、帯域幅を節約し、時間を節約できます)

  • マスターにのみプッシュ - これにより、複雑なロックと同期の問題が解消されます

于 2012-11-06T08:29:00.237 に答える