私たちの小さなオフィスでは、Mercurial をセットアップしています。「本物の」バージョン管理システムを使用するのは初めてです。ライブ サーバー、ステージング サーバー、開発サーバーの 3 つのサーバーがあります。
また、訪問者用、ユーザー用、オフィス スタッフ用のイントラネット サイトの 3 つの比較的大きな Web サイトもあります。
3 つの Web サイトは、一部のコードを共有しています。(たとえば、php クラス ライブラリ、一般的に使用されるコード スニペットなど)
バージョン管理の前は、シンボリック リンクを使用して共有ライブラリにリンクしていました。たとえば、各サイトには「ObjectClasses」ディレクトリへのシンボリック リンクがありました。ObjectClasses 内のファイルに加えられた変更は、すべてのサイトで即座に利用できます。変更したファイルをステージングとライブにアップロードするだけで完了です。
しかし... Mercurial はシンボリック リンクをたどりません。そこで、3 つのサーバー上の 3 つのサイトに共有ライブラリ用のサブリポジトリをセットアップしました (開発サーバー上にリポジトリの 2 つの別個のクローンを持つ 2 人のプログラマーがいるという事実を数えると、実際には「4 つの」サーバーです)。
したがって、共有オブジェクト ライブラリの 12 個の作業コピーがあります。
だからここに質問があります:
上記の設定を簡素化する方法はありますか?
これは私たちのワークフローがどうなるかの例で、複雑すぎるように見えますが、これはバージョン管理を使用するようなもので、慣れる必要があるだけかもしれません:
プログラマー A は、サイト 1 のサブレポにあるオブジェクト Foo に変更を加えます。プログラマー A は、これをどこでも利用できるようにしたいので、それをコミットし、ステージング サーバーにプッシュします。ステージング サーバーにフックを設定して、ステージング サーバー上の 3 つのサイトに変更を自動的に伝達し、ライブ サーバー上の 3 つのサイトに再度伝達します。これにより、ステージング サーバーとライブ サーバー上の 6 つの作業コピーが処理されます。ここまでは順調ですね。
しかし、これらのファイルで進行中の作業がある可能性がある開発サーバーはどうですか?
プログラマー A は、共有サブレポを開発サーバーのサイト 2 と 3 に手動でプルする必要があります。彼はまた、プログラマー B に、サイト 1、2、および 3 の共有サブレポを、開発サーバー上の自分のサイトのコピーで手動でプルするように指示する必要があります。彼がサイト 1 で Object Foo を編集し、サイト 2 で Object Foo に別の編集を行っているとしたらどうなるでしょうか。彼は 2 つの別々の競合を解決する必要があります。
比較的頻繁にオブジェクトに変更を加えます。これは私たちを狂わせるでしょう。私はバージョン管理のアイデアが大好きです。しかし、最適なセットアップを見つけようと 2 週間格闘した後、共有ファイルのコピーを 1 つ持っていて、「やあ、そのファイルで作業しているんだ。 a change」は今のところかなり良さそうです。
これを設定する簡単な方法は本当にありませんか?