2009-07-13 5 views
3

標準のトランク/ブランチ/タグ構造を使用してSVNに格納されている主なビジュアルスタジオプロジェクトがあります。しかし、このプロジェクトはこの構造の外部にある外部プロジェクトを参照しているので、コードブランチを作成すると、exteranlプロジェクトへの参照はすべて1レベルであるので失敗します。SVNコードを分岐してVisual Studioプロジェクトの参照を維持するためのベスト戦略

ie。 trunk/MyProjectCodeは分岐後に/ MyFeatureBranch/MyProjectCodeになります。したがって、この余分なレベルの階層により、外部プロジェクトへの参照はすべて失敗します。

可能な限り摩擦を少なくしてブランチを作成する最良の方法は何ですか?私はすべてのプロジェクト参照を変更するスクリプトを書くことができました。あるいは、私は自分のローカルコードレイアウトを変更して、ブランチが実際にトランクから下がっているので、新しいブランチが同じレベルになるようにできました。他の提案/ベストプラクティス?

+1

あなたはここで答えを受け入れていないが、あなたがこれを分類したかどうか疑問に思っていた。私たちはまったく同じ問題を抱えています。私は何十もの枝を必要としませんが、現在の回避策では、フォルダの深さを同じに保つことしかできません。 – DilbertDave

答えて

3

Subversionからチェックアウトするとき、作業ディレクトリはリポジトリと同じディレクトリ深度を反映する必要はありません。例示の目的のためにコマンドラインを使用すると:

svn co svn://server/project/trunk project 
svn co svn://server/project/branches/MyFeatureBranch project-feature

そのように、あなたは横並びがprojectproject-featureと呼ばれる2つのディレクトリを持っています。これにより、異なるディレクトリ深度と相対パス参照の問題を回避する必要があります。

+0

わかりません:-s これを読んでも、ブランチのプロジェクト機能はトランクのプロジェクトより1つ下になります。 VSは.slnファイルと.csprojファイルの相対パスを使用するため、すべての参照などが壊れます。 – DilbertDave

1

私たちは、その製品に関連するすべてのものを分けます。したがって、その中に5つのプロジェクトがある場合は、5つのプロジェクトすべてをブランチして、そのブランチが使用する予定のものを完全にコピーしていることを確認します。パスに問題がある場合は、Junctionというプログラムをチェックアウトすることができます。

0

過去に私がやったことは、多くのプロジェクトを開発し、多くの共通のリファレンスを開発している開発倉庫では、外部参照を共有場所に保持することでした。これはネットワーク共有、または誰でもハードドライブ(C:\ SharedLibs \ Library \ Versionのような構造)上にある合意された(絶対的な)場所です。私たちはSharedLibsを個別のsvnリポジトリに保管しておいたので、誰もがそのSharedLibsフォルダにチェックアウトして、この絶対パスへの参照を設定しなければなりませんでした。

私が適用したもう1つの戦略は、多くのオープンソースプロジェクトでも見つけられるものです。プロジェクトの横に参照を格納するだけです。例えば。サブフォルダsrc(ソースコード用)とlib(外部参照用)を持つトランクを持つことができます。これはおそらくより良い方法です。プロジェクトを構築するために必要なのは、トランクやブランチのようなものです。チェックアウトしてビルドツールを実行するだけです。

さらに別のオプションはsvn:externalsプロパティを使用しています。このプロパティを使用すると、リポジトリ(または他のリポジトリ)の他の場所にあるファイルがプロジェクトとともにチェックアウトされるようにすることができます。経験から、私はこれをお勧めしませんが、それはオプションです。それについては、svnの本で読む:http://svnbook.red-bean.com/en/1.5/svn.advanced.externals.html

0

私はここで同じ問題があったし、.slnと.csprojファイルの編集については、相対パスを絶対パスで置き換えることを考えました。私は、VSがこれらのファイルを管理していることと、これを元に戻して将来のある時点(プロジェクトを保存してチェックインするなど)で相対パスに戻すのを止めることに少し気をつけました。

今朝私は通勤時間に「明瞭さの瞬間」を持っていました。ブランチを専用のブランチフォルダに保存していても、なぜそれをチェックアウトする必要がありますか?

ので、代わりに:

C: 
|_ svnworkarea 
     |_ project 
      |_ branches 
       |_ project-feature 
         |_ source etc 

      |_ trunk 
       |_ source etc 

私は今持っている:

C: 
|_ svnworkarea 
    |_ project 
     |_ project-feature 
       |_ source etc 

     |_ trunk 
       |_ source etc 

ソースフォルダが同じレベルになりましたように相対パスが有効であると予想されるように参照がロード。トランクは依然として完全に分離されており、プロジェクトの特徴は意味のあるフォルダ名で識別されます。 NewUIBranch。

関連する問題