2010-11-22 91 views
6

我們有幾個Subversion版本庫:一個用於公共代碼,一個用於每個頂級項目。頂級項目有一個svn:外部鏈接到公共存儲庫的主幹。如何更新Subversion外部版本

在構建項目發佈之前,我們創建頂級項目的分支,並在公共存儲庫中創建並行分支。

我們如何自動確保分支頂層項目中的svn:external屬性指向公共目錄中的並行分支 - 目前它將指向公共存儲庫中的「trunk」。我們目前不得不在分支項目中手動編輯它。

感謝

回答

6

如果我理解你,你要確保foobar共享同一個分支。 foo是您的主項目,其上有一個svn:externals,指向bar。當您分支foo時,您需要確保bar正在使用同一分支。確保創建存儲庫的唯一方法是將tagsbranches目錄放置在存儲庫的根目錄下,而不是位於項目的根目錄(與大多數網站一樣)。

然後,您可以使用相對外部參考來指向foo目錄,該目錄包含svn:external回到bar。另外,如果你標記foo和同一個標籤,FOO酒吧和酒吧將保持它們之間的關係:

$ svn propset svn:externals ../../bar common 

如果你的分支是在存儲庫的根,那麼common目錄將指向同一分支對於foo,因爲它在bar上。

snv:externals的大問題是,如果你不小心,你會指向一個不斷變化的目錄鏈接到的目錄。假設有人這樣做:

$ svn propset svn:externals /projects/bar/trunk common 

在我的foo項目中。我做一個版本並將foo複製到一個標籤。但是,我標記的common目錄將在有人更新bar/trunk時進行修改。這使得幾乎不可能重建foo

當我使用svn:externals,我總是確保我連接到任何一個標記版本的bar,或某個特定的版本,如果我是鏈接到某個特定的版本,我也掛我的網址那個版本的情況下,有人決定刪除我鏈接到我的svn:externals屬性的目錄。

有沒有什麼顛覆,它會自動更新您的svn:externals性質的,但你可以搜索所有的svn:使用

$svn propget -v -R svn:externals . 

我發現svn:externals通常最終成爲一個更大的一個目錄樹的外部痛苦比它值得。

取而代之,我只是將bar的構建對象或源代碼的壓縮副本存儲在我的發佈存儲庫中,並且作爲構建過程的一部分,我將對象或壓縮源複製到我的發佈存儲庫中。

我使用Maven網站存儲庫,如Nexus或Artifactory的是,即使我沒有做一個Maven項目,甚至在基於Java項目的工作我的版本庫。本地Maven倉庫提供了所有你需要上傳和下載你依賴的軟件包的工具,加上Maven有發佈庫的概念 - 其中代碼永遠不會改變 - 和快照庫,在這裏你在釋放計劃代碼,但它可能會改變。如果您懷疑bar可能會由於foo中需要的內容而發生更改,這會有所幫助。

+0

感謝您的有用評論。但是我們不能重新排列我們的倉庫,所以我們寫了一個批處理文件,當我們想要爲一個版本分支時運行。批處理文件執行分支並更新svn:externals以指向公共存儲庫中的並行分支。 – 2010-11-23 02:52:33