2009-10-28 10 views
5

私はsvn:externalsの使用を非難するいくつかの答えをここで読んだ。彼らがどのように悪用されるのか分かり、Subversionにもっと依存させるようにしていますが、私たちのグループがすぐにそれから離れていくのは本当にありません。svn externals ...はい、いいえ?

とにかく、ここに私のジレンマがあります。私たちは、リポジトリの独自のセクションにある複数のプロジェクトを参照するソリューションを用意しています。これらのプロジェクトの多くは複数のソリューション間で共有されており、プロジェクトの共有を妨げたくはありません。また、いくつかの固定バージョンの依存関係をリポジトリにチェックインしています(単体テストフレームワーク、ライブラリなど)。

私は開発者のためにソリューションを設定するために、外見だけを使用するいくつかの 'ワークスペース'を設定したいと考えています(Subversionに関しては空のディレクトリか多分単一のソリューションファイルが含まれます)。ほとんどのプロジェクトを単独でチェックアウトするだけではビルドには不十分ですが、ワークスペースをチェックアウトするだけでビルドができます。その依存関係にはすべての依存関係があるためです。他の誰かが似たような解決策を実装していて、svn:externalsはこれについての良い方法でしょうか?私たちがこの道を行くと、あなたは私に何の注意を払いますか?

基本的な構造は、この(簡潔にするために省略トランク/支店/タグ)のようになります。

/projects 
    /project1 
    /project2 
/dependencies 
    /xUnit 
     /1.5 
     /1.4 
    /NHibernate 
     /2.1.0 
     /2.0.1 
/workspaces 
    /project1 
     /project1 (external to ^/projects/project1) 
     /xUnit (external to ^/dependencies/xUnit/1.5) 
     /NHibernate (external to ^/dependencies/NHibernate/2.0.1) 
    /project2 
     /project2 (external to ^/projects/project2) 
     /xUnit (external to ^/dependencies/xUnit/1.4) 
     /NHibernate (external to ^/dependencies/NHibernate/2.1.0) 

答えて

8

SVN Externals are Evil; Use Piston or Braidは、抗外部キャンプの典型的なようです。ポスターにはポイントがあります。

私はより良い基準があると思う:あなたが変更することができ、内部のプロジェクトのための

  • 使用外部参照。
  • 制御できない外部リポジトリにはvendor branchesを使用してください。

だから、svnの外部の問題は、ベンダーの支店の代用としてそれらを使用しているようです。サードパーティ製のRailsプラグインのコンテキストで、何人かの人たちに不平を言うのを見ました。

あなたのケースでは、これらのプロジェクトがすべて「内部」であると仮定すると、外部のsvnは完全に有効なアプローチだと思います。

+2

そのブログ記事のリンクが移動したことに注意してください。それは今ここにあります:http://cobaltedge.com/svn-externals-are-evil-use-piston-or-braid – chrisrbailey

4

これまでの回答にはっきりと同意します。 externalsを使った私の経験から、インフラストラクチャモジュールと内部ライブラリの優れた解決策は、外観をそのトランクではなくライブラリの特定のタグに設定することです。

外部に完全に基づいたワークスペースを使用し、外部をプロジェクト自体に直接追加しない理由を正確に理解できませんでした。私のアプローチは、あなたがSVN上で作成するプロジェクトは、チェックアウト時に「組み込み可能」でなければならないということです。私のアプローチでは、リポジトリは、次のようになります必要があります

:あなたのsvn:externalsのみサードパーティのライブラリを参照する場合

/dependencies 
    /xUnit 
      /tags 
       /1.5 
       /1.6 
      /trunk 
    /NHibernate 
      /tags 
       /2.1.0 
       /2.0.1 
      /trunk 
/projects 
    /project1 
      /tags 
       /1.0 
        /sources 
        /xUnit(externals to /dependencies/xUnit/tags/1.5) 
        /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1) 
      /trunk 
       /sources 
       /xUnit(externals to /dependencies/xUnit/tags/1.6) 
       /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1) 
    /project2 
      /tags 
       /1.0 
        /sources 
        /xUnit(externals to /dependencies/xUnit/tags/1.6) 
        /NHibernate(externals to /dependencies/NHibernate/tags/2.0.1) 
      /trunk 
       /sources 
       /xUnit(externals to /dependencies/xUnit/tags/1.6) 
       /NHibernate(externals to /dependencies/NHibernate/tags/2.1.0) 
0

、なぜ単にMavenの/アイビー・リポジトリを使用しませんか?これらはJavaの世界のためであり、私はそれらの.Netペンダントを知らないが、私は彼らが存在することを確信している。

Ant AntLibファイルを共有するには、svn:externalsをjarアーカイブから読み込むまで使用します。

関連する問題