私の会社では、バージョン管理ツールをRationalClearCaseからGitに変更中です。次の開発シナリオがあります。ClearCaseと同じ動作を実現するためにGitを使用する適切なパターンがあるかどうかを知りたいと思います。
これが私たちの状況に関するいくつかの基本的なポイントです:
- 個別のアプリケーションがいくつかあります。これらをAppA、AppB、およびAppCと呼びましょう。
- また、すべてのプロジェクトに共通する特定のファイル(ビルドスクリプトなど)もあります。これをツールと呼びましょう。
- AppA、AppB、またはAppCコードの特定のカットには、ツールコードの特定のカットが必要です。
- ほとんどの開発者は、ツールコードを変更することはありません。
ClearCaseの場合、次のようにモデル化しました。
コンポーネント:app_a、app_b、app_c、ツール
プロジェクト:AppA、AppB、AppC、ツール
Project AppAには、読み取り/書き込みコンポーネントとしてapp_aが含まれ、読み取り専用コンポーネントとしてツールが含まれています。
Project AppBには、読み取り/書き込みコンポーネントとしてapp_bが含まれ、読み取り専用コンポーネントとしてツールが含まれています。
Project AppCには、読み取り/書き込みコンポーネントとしてapp_cが含まれ、読み取り専用コンポーネントとしてツールが含まれています。
プロジェクトツールには、読み取り/書き込みコンポーネントとしてツールが含まれています。
App *プロジェクトの各ベースラインは、app_*とツールコンポーネントの両方のベースラインを参照します。開発者が推奨ベースラインにリベースすると、両方のコンポーネントから変更が取り込まれます。
Gitの場合、サブモジュールが正しい答えに最も近いものである可能性があると考えています。ただし、リポジトリをプル/リベースする場合、サブモジュールコードを更新するために追加の手順が必要になるようです。理想的には、透明性を保ちたいと思います。また、親リポジトリの観点から、サブモジュールで何が変更されたかを知る必要はありません。サブモジュール全体の特定の時点のみを考慮します。