2010-07-31 98 views
3

如果我沒有遇到this page,我不會去了解svn:externals。所以,我設置了我的工作文件夾。然後「svn:externals」有什麼好處?

mkdir lib/vendor 
svn add --parents lib/vendor 
svn ps svn:externals 'symfony http://svn.symfony-project.com/branches/1.4/' lib/vendor/ 
svn ci -m "add externals" 
svn update 

「svn update」登記了整個symfony文件夾,速度很慢。我認爲這將是一次性的痛苦。但是,每次我輸入「svn up」時,SVN都會檢查外部存儲庫。我必須使用--ignore-externals來快速創建「svn update」。

我想知道svn:externals的好處是什麼,如果它太慢了。我寧願將symfony複製到我自己的存儲庫,這肯定是一個更快的解決方案。

回答

3

你使用外部的方式是爲那些想要在某些代碼的頭部修訂上工作的人,例如,如果你在一個內部項目中共同開發各種類型的庫和應用程序。通常情況下,你不應該沒有理由這麼做,因爲外部代碼修訂可能會破壞你的代碼 - 如果你沒有權利修復外部代碼,那麼使用它就變得有點麻煩。

您可以獲取外部存儲庫的具體修改到自己的回購所謂的賣主分支或版本參數開關添加到您的外部定義,就像這裏解釋,例如:

http://thinkinging.com/2008/10/21/set-the-revision-of-your-svnexternals-or-else/

2

svn:externals機制的行爲與廣告一樣。問題是你正在使用一個公共的Subversion版本庫(通過互聯網訪問),我認爲它是一個本地版本庫。因此,您看到更新內部存儲庫與外部引用存儲庫的時間差異很大。

複製到您的存儲庫當然是一個可行的解決方案。如何做到這一點明確記錄在Subversion book

5

SVN外部項目也與項目組織有很大關係。外部可以是完全不同的SVN回購,這意味着你可以設置不同類型的安全,保護,訪問,預先提交的鉤子,提交後的鉤子等......對於不同的文件夾進行不同級別的訪問是很困難的一個單獨的SVN回購(沒有像VisualSVN之類的幫助),並且對單個SVN回購中的不同文件夾嘗試做不同的備份或安全方法是非常困難的(也可能是不明智的)。外部通過允許我們用單一的svn up將幾個不同的儲存庫縫合在一起,允許我們更多的自由。

顛覆的外部對象的用例:

  1. 的常見使用是用於外部以包含一個庫或一些其它片的不可變的代碼。如果你有一個.dll文件,你完全可以將它放到你的SVN倉庫中,並把它作爲你的代碼庫的一部分,但是你已經掩蓋了這樣一個事實,即.dll應該被視爲只讀,而不是由您或您的團隊開發。

  2. 另一個用例(您已經發現)是允許您的庫保留在一個移除存儲庫 - 可能是一個由活動的開源項目維護的庫。在這種情況下,您可以始終指向外部的特定版本,而不必擔心自己存儲它。

  3. 最後,外部可以拉入幹線,分支或標籤,這意味着您可以使用它們將由您自己模塊的不同標籤版本組成的項目拼接在一起。這更接近模仿Rational ClearCase或任何其他大型版本控制系統。您可以通過爲每個模塊或代碼庫的組件維護一個SVN repo,爲每個模式/組件創建一個標籤,然後使用主存儲庫的externals屬性來引用標籤 - 只需將它們拉到一起成爲一個工作項目。