2

私は Subversion を使用しているチームで働いており、Mercurial への切り替えを検討しています。

いくつかのプロジェクト間で共有されるいくつかのコードだけでなく、独自のコードの複数の個別のプロジェクトがあります。簡単にするために、 と の 2 つのプロジェクトがSpaceGameありSeaGame、どちらも のコードを使用しているとしますGraphicsEngineGraphicsEngineゲームとは多少独立して開発されています。SpaceGame数か月前のリビジョン 467に更新する必要があるとします。SpaceGameリビジョン467 に戻る必要があり、467GrpahicsEngineだったときのリビジョンに戻る必要があります。SpaceGameGraphicsEngine最新のリビジョンにとどまることはできません。Subversion でこれを実現できる唯一の方法は、すべてのプロジェクトを配置する 1 つの大きなリポジトリです (外部では必要な動作が得られません)。ただし、これは私たちのチームに多くの問題を引き起こします。レポは巨大で、完全にチェックアウトしたい人はほとんどいません。必要なプロジェクトだけをチェックアウトします。

Mercurial でこの状況をどのように処理しますか?

4

2 に答える 2

4

これは、Mercurial サブリポジトリの使用例のように思えます。

GraphicsEngineこれは、サブリポジトリとして に配置できることを意味しますSpaceGame(または、推奨される構造
に従う場合は、とと サブリポジトリの両方を含む薄い「ラッパー」リポジトリを作成します)GraphicsEngineSpaceGame

サブリポジトリが機能する方法にSpaceGameは、常に最新バージョンのバージョンが含まれているとは限りませんGraphicsEngine...特定の修正されたリビジョンを指しGraphicsEngine、その間に更新された場合、これらの変更を自動的に取得SpaceGameしませ...明示的な更新を行う必要がありますそれらを取得します。
これは、SpaceGame他の誰かが に変更を加えたために、 が予期せず壊れることがないことを意味しGraphicsEngineます。

これはまた、「数か月前からリビジョン 467 に」更新すると、サブリポジトリが467のときのリビジョンに自動的に更新されることも意味します(これはあなたが尋ねたことです)SpaceGameGraphicsEngineSpaceGame


編集:

いいえ、GraphicsEngineまだ別のリポジトリであり、誰にも「所有」されていません。
サブリポジトリとして使用すると、親リポジトリから「リンク」されます (複数の親リポジトリからリンクできます)。それはまだ別のリポジトリのままです。

サブリポジトリを使用すると、次のようなことが可能になります。

GraphicsEngine      // main GraphicsEngine repo, current revision: 300

SpaceGame           // main SpaceGame repo
  └ GraphicsEngine  // GraphicsEngine subrepo, current revision: 265

SeaGame             // main SeaGame repo
  └ GraphicsEngine  // GraphicsEngine subrepo, current revision: 241

と の両方SpaceGameSeaGameそれぞれGraphicsEngineサブレポがあります。各サブレポは、特定のリビジョン(私の例では 265 と 241)
を「指しています」 。 の開発は継続しています ( rev 300 です) が、最新の変更は と では表示されません。どちらも古いリビジョンを指しているためです。GraphicsEngine
GraphicsEngineGraphicsEngineSpaceGameSeaGameGraphicsEngine

于 2013-01-03T10:36:50.740 に答える