2009-10-28 80 views
5

我在這裏讀過一些譴責使用svn:externals的答案。我確實看到它們如何被濫用,它確實使我們更加依賴Subversion,但我不認爲我們的團隊很快就會離開它。svn externals ...是或否?

無論如何,這是我的困境。我們的解決方案引用了存儲庫中各個部分的多個項目。這些項目中的許多項目是由多個解決方案共享的,我們也不希望排除我們項目的共享。我們還有幾個固定的版本依賴關係被檢入我們的倉庫(單元測試框架,庫等)。

我想爲我們的開發人員配置幾個只使用外部(只要Subversion擔心他們只是空目錄,或者可能包含單個解決方案文件)的'工作空間'來配置解決方案。單獨檢出大多數項目並不足以構建它們,但檢出它的工作空間足以構建它,因爲它的所有依賴項都會隨之而來。有沒有其他人實現了類似的解決方案,並會svn:外部是一個很好的方式來解決這個問題?如果我們走這條路,你對我有什麼謹慎的話?

基本結構是這樣的(主幹/分支/略去了標籤):

/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 external是一個完全有效的方法。

+2

請注意該博客文章的鏈接已移動。它現在在這裏:http://cobaltedge.com/svn-externals-are-evil-use-piston-or-braid – chrisrbailey 2010-04-13 15:08:50

4

我絕對同意以前的答案。 根據我的使用經驗,只要您將外部設置爲庫的特定標記而不是其主幹,則對於基礎結構模塊和「內部」庫而言,使用externals的優秀解決方案是非常好的解決方案。

我不明白爲什麼要使用完全基於外部的工作空間,而不是直接將外部添加到項目本身。我的做法是,您在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) 
0

如果您svn:externals僅供參考第三方庫,爲什麼不乾脆用一個Maven /常春藤庫?這些是針對Java世界的,我不知道它們的.Net掛件,但我確信它們存在。

我只使用svn:externals共享Ant antlib文件,直到他們有可能從jar包中加載它們。