-1

コードベースの SCM を設計するのに助けが必要です。コードベースはかなり複雑なので、最初に説明します。

コードベースは、簡単にするために、多くの異なる製品のコードで構成されていますProduct1(Product2実際にはもっと多くの製品があります)。それぞれProductに複数のソフトウェアがProjects関連付けられています。たとえば、 、およびアプリCore Applicationなどのサポート ソフトウェアがあります (これは製品によって異なります)。それぞれが共通のコードを使用する必要があります(つまり、、およびアプリケーションはすべて共通のコードを共有する必要があります)。さらに、社内ライブラリを相互に共有する必要があります。iOSAndroidProjectProductCoreiOSAndroidProducts

事実上、次のような構造になります。

Library1
Library2
Product1
├── Common
├── Core Application
├── iOS
└── Android
Product2
├── Common
├── Core Application
├── iOS
└── Android

次の機能は絶対に必要です。

  1. プロジェクトの最小限のコード セットをチェックアウトする機能 - たとえば、Product1's Androidアプリケーションをビルドする場合、、、、、のみをチェックアウトLibrary1します。コードベースが非常に広大であるため、すべてをチェックアウトするには膨大な時間がかかりますLibrary2Product1/CommonProduct1/Android
  2. 共有ライブラリ、共通コード、プロジェクト コードの状態を特定のリビジョンに戻す - たとえばProduct2's Core Application、バグをテストするために 2 か月前と同じようにビルドする必要があり、 が必要でLibrary1Library2すべて同じリビジョンに戻す必要があります。Product2/CommonProduct2/Core Application
  3. 履歴を維持しながら、ファイルを別の共有フォルダーに移動する - 最初にすべての a の正しいコードをフォルダーに入れることは不可能ProductですCommon。時間の経過とともに要件が変化し、新しい製品が要求されます。つまり、かつて存在していたコードは、または場合によってProduct2/Core Applicationは に移動する必要があります。Product2/CommonLibrary2

現在、私たちが使用しているシステムは巨大な SVN リポジトリであり、すべてのProductsProjectsおよびLibraries. SVN では選択的なコード チェックアウトが可能であるため、特定のフォルダーのみをチェックアウトすることを選択できます。すべてが 1 つのリポジトリであるため、すべてが同じリビジョンにうまく戻ります。分岐またはタグ付けするときは、リポジトリ全体に分岐/タグ付けします!

私が望むのは、コード ベースを適切にモジュール化することです。たとえば、Library1独自のリポジトリに存在し、他のリポジトリに単純に含まれるようにします。svn::externalsこれは要件 2 に違反するため、 では実際には不可能です。

次の理由から、何らかの形式の DVCS を使用したいと思います。

  1. パフォーマンス - 大きな変更セットをコミットすると SVN が遅くなる
  2. Braching/Merging - 大きな SVN ブランチをマージしようとするのは悪夢です。DVCS を使用すると、はるかに簡単になります。
  3. モジュールの適切なサポート。Git にはサブモジュールがあり、Mercurial にはサブリポジトリがあり、これは私の設計目標に合っているようですが、両方とも、リビジョンを変更するときにサブリポジトリを手動で更新する必要があるようです。簡単な1ステップで済ませたい。
  4. より明確なリポジトリ構造。サブリポジトリを使用すると、各プロジェクトは明確な構造と明確な依存関係を持つ独自のリポジトリになります。

何か案は?

4

1 に答える 1

1

最近、サブリポジトリをより簡単かつ効率的に使用できるようにすることを目的として、Mercurial にいくつかの変更が加えられました。私はそれらに細心の注意を払っていません - 最近のhg-crew のコミット履歴を見て、あなたの決定に影響を与える可能性のあるものがそこにあるかどうかを確認してください。

私は Git と Mercurial の両方を広範に使用してきましたが、Mercurial についての知識がはるかに深く、それを使用する方がずっと好きです。私はプロジェクトを ClearCase、SVN、Git から Mercurial に移行しましたが、いずれの場合も移行は非常にスムーズでした。重要なのは、チームのワークフローを設定し、代表的なテスト リポジトリを設定して、最初に試してみてください。

このhg convert拡張機能は、リポジトリをさまざまなソースから Mercurial リポジトリに変換し、ファイルマップを使用してリポジトリの一部のみを変換したり、ファイル/ディレクトリの名前を変更したりできます。Git にも似たようなものがあると確信していますが、使用する必要はありませんでした。それ。

于 2013-03-26T20:02:43.207 に答える