2008-10-13 53 views
13

我負責幾個(相當小的)程序,它們通過不同的庫共享大量的代碼。我想知道什麼是最好的存儲庫佈局來開發不同的prorgrams(和庫),並保持所有程序中的庫同步。跨越不同程序開發的庫的Subversion存儲庫佈局

對於參數的緣故,讓我們說,有兩種方案有兩個庫:

  • PROGRAM1
    • 分享幫助
    • Library2
  • Program2中
    • 分享幫助
    • Library2

當然,錯誤修復和改進的圖書館應該(最終)合併的所有程序。由於圖書館正在研究不同的計劃,因此使用externals definitions似乎是不可能的。

所以我想我所有的圖書館除了一個地方vendor branches,但我不知道什麼是最好的佈局。

我想沿着線的東西:

    • 分享幫助(祖先)
    • Library2(祖先)
  • PROGRAM1
    • PROGRAM1代碼
    • 分享幫助(vendor分支)
    • Library2(vendor分支)
  • ...

然後開發PROGRAM1當一些變化是Library2由說,我將它們合併回庫一部分存儲庫,並在需要時將它們從那裏合併到所有其他程序中。

合併到其他程序並不總是立即發生,在Program2上工作的人可能接近發佈版本,而是先完成創建標記,然後才更新所有庫。

我有點擔心這會導致許多合併和一段時間後的維護頭痛,但我真的沒有看到更好的解決方案。

然後,這似乎是一個相當普遍的用例,所以我想我只是問問stackoverflow社區,什麼是最好的存儲庫佈局來實現這個目標?

回答

9

嗯,我想我不同意外界是不可能的。我過去也遇到類似的問題。我使用svn property externals解決了它。

創建庫庫:

svnadmin create /path/library1 
svnadmin create /path/library2 
... 

創建客戶端庫:

svnadmin create /path/program1 
svnadmin create /path/program2 
... 

現在我宣佈,計劃庫中庫外部:

cd /path/program1 
svn propset svn:externals "library1 svnpath://wherever/library1/trunk/" . 
svn propset svn:externals "library2 svnpath://wherever2/library2/trunk/" . 

現在,那麼你可以讓更改程序1 & 2並在根目錄下進行提交這些項目不會影響圖書館......但是,如果您需要對圖書館進行更改,您可以。然後,當且僅當您有對庫存儲庫的寫入權限時,纔可以提交這些更改 - 但只能從庫的子目錄中提交。

I.e.這並沒有提交到庫...

... make a change in /path/program1/library1 ... 
cd /path/program1 
svn commit -m "some change" 

這犯上面的庫所做的更改:

cd /path/program1/library1 
svn commit -m "change to library code" 
上的程序工作,而
1

爲什麼圖書館的來源必須存在於程序樹中。分別編譯您的庫並將它們鏈接到您的程序中。

+1

圖書館正在開發... – Pieter 2008-10-13 19:48:42

+0

好...所以你有一個標籤版本的庫,它不是開發主幹,這就是你鏈接到你的程序的東西。 – 2008-10-13 20:12:26