2010-04-13 72 views
1

我的團隊正在考慮從ClearCase的轉移到Subversion和我們正在考慮舉辦這樣的存儲庫:存儲庫佈局和稀疏檢出

\trunk\project1 
\trunk\project2 
\trunk\project3 

\trunk\staticlib1 
\trunk\staticlib2 
\trunk\staticlib3 

\branches\.. 
\tags\.. 

這裏的問題是,我們有很多的項目(1000+)並且每個項目都是鏈接到幾個常見靜態庫中的dll。因此,檢查中繼線中的所有內容都是非啓動器,因爲它會花費太長的時間(〜2 GB),並且對於分支而言很難實現。

使用svn:externals爲每個項目提取相關文件夾似乎並不理想,因爲它會生成多個工作副本 - 一個用於項目,一個用於每個靜態庫文件夾。如果更改跨越項目和一些靜態庫,我們也無法進行原子提交。

稀疏結帳聽起來非常適合這一點,因爲我們可以編寫一個腳本來只提取所需的目錄。但是,當我們想要將分支中的更改合併回主幹時,我們需要先檢查完整主幹。

不知道是否對1)更好的存儲庫組織或者2)將分支更改合併到稀疏主幹工作副本的方法?

+0

我不會放棄那種快速的外部。他們也有優勢,您可以爲特定的項目標籤綁定特定的分支/標籤。從可重複地構建舊版本中拿出一些地獄。 – sbi 2010-04-13 16:08:59

+0

嗯掛鉤對我們來說不會那麼有用,因爲開發任務通常會涉及項目和其中一些相關靜態庫的更改。 – Ying 2010-04-13 16:24:01

+0

雖然外部本身很難自動標記。如果project1有staticlib1的頭部外部,你不能只標記project1,你還必須知道把staticlib1放到同一個標記中(假設外部是相對的),或者單獨標記它並修改外部(假設它是絕對的)。如果這是解決的,外部是偉大的。 – Eugene 2010-04-13 16:28:48

回答

3

關於#2

即使是可以執行與稀疏檢出合併,我不會推薦。在不完整或淺的工作副本中執行的合併會導致創建子樹mergeinfo。 Subtree mergeinfo隨着時間的推移會變得非常麻煩。

請參見:Where Did That Mergeinfo Come From?

我建議總是從源分支的根合併到目標分支的完整,整潔的工作拷貝的根。在解決了任何衝突並完成了其他必要的驗證之後,我將從該工作副本的根目錄提交。

如果您是Subversion的新手,我強烈建議您閱讀重新集成的分支機構,反思性合併以及mergeinfo如何工作。 Submerged blog有很多很好的信息,svn book也是如此。