5

svn:externalsの使用を非難するいくつかの回答をここで読みました。それらがどのように悪用される可能性があるかはわかります。それにより、Subversionへの依存度が高まりますが、私たちのグループがすぐにSubversionから離れることはありません。

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

開発者向けのソリューションを構成するために、外部のみを使用するいくつかの「ワークスペース」を構成したいと思います(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)
4

3 に答える 3

8

SVNの外部は悪です。ピストンまたはブレードを使用することは、反外部キャンプの典型的なようです。そして、ポスターには意味があります。

より良い基準は次のとおりです。

  • 変更可能な内部プロジェクトの外部参照を使用します。と
  • 制御できない外部リポジトリにはベンダーブランチを使用します。

したがって、svnの外部の問題は、ベンダーのブランチの代わりにそれらを使用する人々に起因しているようです。サードパーティのRailsプラグインのコンテキストでそれらについて不平を言う人が何人かいます。

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

于 2009-10-28T01:40:40.903 に答える
4

私は前の答えに間違いなく同意します。私の経験から、外部をトランクではなくライブラリの特定のタグに設定する限り、外部を使用することはインフラストラクチャモジュールと「内部」ライブラリの優れたソリューションです。

完全に外部に基づいており、外部をプロジェクト自体に直接追加しないワークスペースを使用する理由を正確に理解していませんでした。私のアプローチでは、SVNで作成するプロジェクトは、チェックアウト時に「ビルド可能」である必要があります。

私のアプローチでは、リポジトリは次のようになります。

/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)
于 2009-10-28T08:08:00.977 に答える
0

サードパーティのライブラリのみを参照している場合svn:externalsは、Maven / Ivyリポジトリを使用してみませんか?これらはJavaの世界向けであり、.Netペンダントはわかりませんが、存在すると確信しています。

Ant antlibファイルを共有するために使用svn:externalsするのは、jarアーカイブからそれらをロードする可能性が得られるまでです。

于 2009-10-28T18:07:04.267 に答える