0

私たちの小さなオフィスでは、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」は今のところかなり良さそうです。

これを設定する簡単な方法は本当にありませんか?

4

1 に答える 1

0

使用している特定の Web プラットフォームとテクノロジ (.NET、LAMP、ColdFusion など) に関する詳細情報がなければ、この回答は不十分かもしれませんが、それでも試してみましょう。まず、私があなたのことを正しく理解していれば、問題はあなたの作業パラダイムです。開発者がファイルに変更を加えてから、それらを 3 つの異なるサイトにプッシュしています。開発に関する懸念をビルド/デプロイに関する懸念から完全に分離することをお勧めします。

共有コードを処理するために Mercurial のサブリポジトリを使用しているように思えますが、これは賢明なことです。これにより、複数のプロジェクト間でコードを共有できます。ただし、各プログラマーが更新後に特定のサーバーにプッシュするのではなく、代わりに他の「ステージング」リポジトリにプッシュするようにします。必要に応じてサーバーごとに 1 つ持つこともできますが、すべての開発を単一のステージングまたは「マスター」リポジトリに保持してから、ステージングおよび/またはライブサーバーにビルド/デプロイするために使用する方がおそらく理にかなっていると思います.

このプロセスを自動化したい場合は、これを実行できるツールがいくつかあります。私は通常、ビルドの統合のために CruiseControl を使用した NAnt を好みますが、私の作業はほとんど .NET であり、これが最適です。より詳細な情報を提供していただける場合は、必要に応じて詳細を提供できますが、克服すべき主な問題は、ワークフローの処理方法だと思います。Mercurial を使用して、複数の開発者が 1 つのリポジトリからのプル/プッシュに満足できるようにし、別のステップとしてテストのためにサーバーにデプロイすることを心配します。

于 2011-06-21T22:40:16.080 に答える