2

DVCS で共通ライブラリ ソースをどのように管理しますか?

現在、私のチームは Perforce を使用してソフトウェア プロジェクトを管理しています。Perforce の「ワークスペース マッピング」機能を使用して、共通ライブラリ ソースを開発アプリケーション ディレクトリに簡単にマップし、ソース管理と開発プロジェクト作業の間の変換を透過的に保つことができます。たとえば、リポジトリは次のようになります。


SCMツリー構造

    • アプリ
      • フォーラムサイト
      • 管理ツール
    • 一般
      • event.logger
      • json.parser
    • デシベル
      • ユーザー
      • サイト構成

優れた P4 マッピング機能により、開発者は、ワークスペース マップを使用して最も理にかなった形式で、作業中のプロジェクトの完全なソース セットを取得できます。典型的な開発プロジェクト フォルダーは次のようになります。


開発プロジェクト フォルダ

/projects
    /FALL-2009
        /ForumSite
            /deps
                /event.logger
                /json.parser
        /AdminTool
            /deps
                /event.logger
                /json.parser
        /Users-db
        /SiteConfiguration-db
    /FALL-2009-PATCH-01
        /json.parser
        /SiteConfiguration-db
    /FALL-2009-PATCH-02
        /AdminTool
            /deps
                /event.logger
                /json.parser
        /SiteConfiguration-db

開発者が自分のコンポーネントまたはアプリケーションでソースを編集すると、変更は正しいバージョン ポイントの正しいソース管理ディレクトリにマップされます。これは開発者にとって透過的であり、管理の複雑さと新しいプロジェクトを設定する時間を削減します。

Perforce の潜在的な代替手段として、Git、Bazaar、および Mercurial を調査しています。DVCS の世界で一般的なコンポーネント ソースがどのように処理されているかについて、誰か洞察を提供できますか?

4

4 に答える 4

6

Git では、git submoduleこの目的で使用します。

Git サブモジュールは、他のリポジトリを見つけるための URL を提供するファイルとともに、別のリポジトリからのリビジョンへの参照として保存されます。を実行するgit submodule updateと、Git は参照されたリポジトリのコピーを複製します (または、DVCS であるため、別の URL にある同じリポジトリの別のコピーを指すように構成できます。参照されたリビジョンも機能します)、参照されたリビジョンをチェックアウトします。

残念ながら、希望するほどシームレスではありません。親リポジトリで新しいリビジョンをチェックアウトしても、実際にはサブモジュールはチェックアウトされません。これを達成するには明示的に行う必要がありますgit submodule update。単一のコマンドとしてラッピングを試みましたが、サブモジュールも更新しないため、ファイルのチェックアウトを伴うgit pull; git submodule update他の多くのコマンド ( など) があり、混乱する状態になる可能性があります。git rebaseサブモジュールがどのように機能するかを理解すれば、すべてうまくいきますが、多少の摩擦が生じます。

于 2010-01-02T06:10:20.680 に答える
4

非常によく似た質問が2日前に水銀特有の方法で尋ねられました:

複数の(Mercurial)リポジトリに保存されている共通のライブラリファイルへの変更をどのように管理しますか?

現在Mercurialで十分にサポートされているSubrepoサポートは、セットアップに最適なオプションのようです。

于 2010-01-02T07:03:49.297 に答える
2

Bazaar では、コンポーネントの必要な構成を指定できるプラグインscmprojを使用しているため、説明したように、実際のブランチとローカル ディスク上のセットとの間の任意のマップを提供できます。

于 2010-01-02T07:14:50.003 に答える
1

私たちは git を使用しており、そのサブモジュール機能に非常に満足しています。もちろん、リビジョンを使用して、他の git リポジトリを現在のリポジトリに統合できます。私は何を見ることができますか、それはうまくいきます:-)

于 2010-01-02T05:50:00.880 に答える