私の会社では、C++ コードを保持するために 1 つの SVN リポジトリを使用しています。コードベースは、共通部分(インフラとアプリケーション)とクライアントプロジェクト(プラグインとして開発)から構成されています。
リポジトリのレイアウトは次のようになります。
- インフラストラクチャー
- アプリ1
- アプリ2
- アプリ3
- プロジェクト-クライアント-1
- App1-プラグイン
- App2-プラグイン
- 構成
- プロジェクト-クライアント-2
- App1-プラグイン
- App2-プラグイン
- 構成
クライアント プロジェクトの一般的なリリースには、プロジェクト データと、それによって使用されるすべてのプロジェクト (インフラストラクチャなど) が含まれます。
各ディレクトリの実際のレイアウトは -
- インフラストラクチャー
- 枝
- タグ
- トランク
- プロジェクト-クライアント-2
- 枝
- タグ
- トランク
そして、同じことが残りのプロジェクトにも当てはまります。
上記のレイアウトにはいくつかの問題があります。
- 関連するすべてのプロジェクトをチェックアウトする必要があるため、クライアント プロジェクトの新しい開発環境を開始するのは困難です (例: Infrastructure、App1、App2、project-for-client-1)。
- 上記と同じ理由で、クライアント プロジェクトでリリースにタグを付けるのは困難です。
- クライアント プロジェクトで一般的なコード (インフラストラクチャなど) を変更する必要がある場合、ブランチを使用することがあります。プロジェクトでどのブランチが使用されているかを追跡するのは困難です。
SVN で上記のいずれかを解決する方法はありますか? クライアント プロジェクトで svn:externals を使用することを考えましたが、この投稿を読んだ後、それが正しい選択ではない可能性があることがわかりました。