2011-10-28 4 views
2

は、このようなリポジトリの組織を想像してみて:を使用すると、マルチプロジェクトリポジトリのコンポーネントのバージョンを管理する方法は?

/Project1/branches 
      /tags/Rel-1.0 
      /trunk 
/Module1/branches 
      /tags/Rel-1.0 
      /tags/Rel-1.1 
      /tags/Rel-2.0 
      /trunk 
/Module2/branches 
      /tags/Rel-1.0 
      /tags/Rel-1.1 
      /tags/Rel-1.2 
      /tags/Rel-1.3 
      /tags/Rel-2.0 
      /tags/Rel-2.1   
      /trunk 

project1にはModule1のとモジュール2を使用しています。 project1のリリース1.0は、Module1とModule2のリリース1.0を使用して行われます。

Project1の新しいリリース(例1.1の名前であり、大きな進化ではありません)は、Module1のリリース2.0とModule2の2.1を使用して行われます。

どのようにSubversionを使用してこれを行うことができます。

答えて

1

私はSVN(JavaverseのApache MavenまたはIvyを考えてください)の外で依存関係管理を解決しようとします。

SVNでなければならない場合は、特別なタグ名はどうですか?したがって、ビルドシステムがProject1のRel-1.0ビルドに必要なコードのために、/Module1/branches/deps/Project1/Rel-1.0のような、依存するバージョンの特別なフォルダ内をビルドシステムが検索するという概念を導入することができます。

/Project1/branches 
      /tags/Rel-1.0 
      /trunk 
/Module1/branches 
      /tags/Rel-1.0 
      ... 
      /tags/Rel-2.0 
      /deps/Project1/Rel-1.0 
      /deps/Project1/Rel-1.1 
      /trunk 
/Module2/branches 
      /tags/Rel-1.0 
      ... 
      /tags/Rel-2.1   
      /deps/Project1/Rel-1.0 
      /deps/Project1/Rel-1.1 
      /trunk 

あなたはタグのフォルダに参照することにより、扶養家族のためのフォルダを作成することができます。

それ以降のバージョンを切り替える
# dependencies to Module1 
svn cp http://myServer/svn/Module1/branches/tags/Rel-1.0 http://myServer/svn/Module1/branches/deps/Project1/Rel-1.0 
svn cp http://myServer/svn/Module1/branches/tags/Rel-2.0 http://myServer/svn/Module1/branches/deps/Project1/Rel-1.1 
# dependencies to Module2 
svn cp http://myServer/svn/Module2/branches/tags/Rel-1.0 http://myServer/svn/Module1/branches/deps/Project1/Rel-1.0 
svn cp http://myServer/svn/Module2/branches/tags/Rel-2.0 http://myServer/svn/Module1/branches/deps/Project1/Rel-1.1 

# delete old reference 
svn rm http://myServer/svn/Module1/branches/deps/Project1/Rel-1.1 
# make other one for new version 
svn cp http://myServer/svn/Module1/branches/tags/Rel-2.1 http://myServer/svn/Module1/branches/deps/Project1/Rel-1.1 

ようになり、このアプローチの欠点は、より多くのスペースかもしれませんSVN作業ディレクトリの要件。

+0

私のプロジェクトはC++です。一部のコンポーネントはサードパーティのライブラリでもあります。 私の第一の目的は、リポジトリに最適なプロジェクトと図書館の組織を見つけることです。 私の2番目の目標は、SVNの下で私が簡単にアプリケーションをどのように構成されているアプリケーション(どのモジュールが埋め込まれているか)を自動的に知り、管理できるかどうかを確認することです。 – Manu13

+0

このアプローチの問題は、 。 Repoや作業コピーからメタデータを読み込み、適切なものを適切に構築する独自のビルドプロセス(make、cmakeなど)を作成する必要があります。 少なくとも、XMLを使って読み込みを行うことができます(コマンドラインで 'svn ls --xml http:// server/repo/path/to/list'のように)。 もう1つのアプローチは、現在の依存関係が記述されているプロジェクトまたはモジュールのパスにファイルを配置することです。それはビルドツールで読み取って実行することができます。 – chabicht

+0

私は明らかな解決策を完全に忘れていました。makeのようなビルドツールを使用している場合は、すでにバージョン管理下にファイルがあります。依存関係の説明を置くことができます:_the makefile _...:o) – chabicht

1

"エンティティ"(Project、Module1、Module2、...、ModuleN)ごとに別々のリポジトリに分割してリポジトリの再編成を提案し、プロジェクトリポジトリでsvn:externalsを直接埋め込みコード。

外部ステージのHEADを参照してください。プロジェクトのタグ付けの前に、プロジェクトのすべてのリリースで(特別なタグとしてマークされていますか?)プロジェクトを編集して、含まれているモジュールの一部の修正版に外部を固定する必要があります。

プロ

  • モジュールのすべてのタグ付けされたリリースリンクされたバージョンを簡単に識別
  • レポはより多くのAを持っているために、あなたは独立したサブ部品
  • へ(SVNの面で)deleopment歴史を分離します簡単なコードツリー
  • /何か忘れて/

コントラ

0123プロジェクトの
  • 歴史が原因分岐点が存在するために透明で、古代の改正(分岐前)では動作しません与える(与えることができます)いくつかの頭痛
関連する問題