0

当社では、いくつかのフレームワーク/ライブラリを重ねてプロジェクトを作成しています。

/Framework
/Extensions (depends on Framework)
/Business (depends on Framework & Extensions)
/Project A (depends on Framework & Extensions & Business)
/Project B (depends on Framework & Extensions & Business)
/Project C (depends on Framework & Extensions & Business)
/...

これまでのところ、すべてのプロジェクトとフレームワークを含む大きな git リポジトリを使用しており、git サブツリーを使用してフレームワークのみを分割して公開しています (オープン ソースです)。

この大きなリポジトリを異なるプロジェクトに分割できるようにしたいのですが、再帰的な依存関係が非常に多いという事実が心配です:

私の知る限り、両方の git サブモジュール/git サブツリーでは、すべてのライブラリ コードがメイン リポジトリ内にある必要があるため、次のようなプロジェクト構造になります。

/Framework
/Extensions/Framework 
/Business/Extension/Framework
/Project A/Business/Extensions/Framework
/Project B/Business/Extensions/Framework
/Project C/Business/Extensions/Framework

フレームワークのコピーがどこにでもたくさんあるのは好きではありません。また、フレームワーク フォルダーが階層内で非常に深くなるという事実も好きではありません。

私たちが望むのは、プロジェクト A リポジトリがプル時に、現在のリポジトリと並んでいくつかの SHA を含むリポジトリがあることをアサートし、この SHA をチェックすることです。

git サブモジュール/サブツリーを並べて作成する方法はありますか?

4

1 に答える 1

0

開発環境については説明していませんが、説明したことは、Linux /usr/lib および /usr/include に依存するコードを開発する場合と大差ないように聞こえます。多くのプロジェクトは共有ライブラリに依存しています。これらのプロジェクトを実行可能ファイルにコンパイルするには、プロジェクトが依存する安定したバージョンのライブラリ (フレームワークと拡張機能) をインストールする必要があります。

あなたのケースでは、Framework、Extensions、および Business がすべて安定している (または少なくとも更新頻度が低い) と仮定しましょう。次のような 3 つのチェックアウトがあります。

cd /stable
git checkout -b version-x.y /path/to/Framework.git
git checkout -b version-x.y /path/to/Extensions.git
git checkout -b version-x.y /path/to/Business.git

開発マシンでこれらの「ライブラリ」を取得するために、すべての開発者が実行します。各プロジェクトには、これらのライブラリを参照するビルド/メイク命令があります。(参照は、/stable/... のように絶対的であるか、'Project X' の場所に対して相対的である可能性があります。) フレームワークに対する拡張機能の依存関係と、拡張機能およびフレームワークに対するビジネスの依存関係についても同様です。

このアプローチでは、各クローンは 1 つしかありませんが、すべての依存関係が整っています。

[編集] 各プロジェクトが依存するものを変更する必要がある場合、上記は機能しません。その場合、すべてを複数回複製することは避けられません。実際、サブモジュールを使用してクローンを作成し、1 つのプロジェクトの変更を必要に応じてマスターにマージできるようにすることをお勧めします。

于 2012-06-20T23:23:44.830 に答える