2009-11-26 172 views
0

目前,我們有我們我們的源代碼存儲。我們有一個大範圍的項目有(數百個)和多個公共圖書館等源代碼控制版本和引用

這一切都工作的很好SVN存儲庫中,但它結構不規範。最初我們的目標是標準的「Trunk \」,「Tags \ Tag_1.0.0 \」樣式模型,但是我們遇到的問題是我們項目的相對路徑停止工作。

EG:

- Common 
|- Trunk 
|- Tags 
||- Tag_1.0.0 
- OtherProject 
|- Trunk 
|- Tags 
||- Tag_1.0.0 

在這種結構中(我會打電話給比較規範,糾正我,如果我錯了)在OtherProject共同的標籤從後備箱夾的引用將是」 ../ ../Common/Tags/Tag_1.0.0「,它解析爲/Common/Tag_1.0.0(實際上會有更多的..因爲這些項目在主幹中並不平坦,但是這樣可以節省巨大的圖表)。一旦標記了相同的相對路徑即可進入「/OtherProject/Common/Tags/Tag_1.0.0」。

解決方法我可以想到的解決方法包括絕對路徑,但不是所有的開發人員都使用相同的文件夾來存儲我們的文件(或者甚至是相同的硬盤驅動器號),在標記之前更改引用權限,但是標記主幹時有些可怕它不會編譯並希望一旦它在標記文件夾中就可以工作,或者將每個項目的引用放入項目本身的DLL形式中,但在Visual Studio中並不那麼容易(對於我們來說,引用中繼到並且同時編輯這兩個項目 - 當然後面會加上標籤),它會讓我們的SVN倉庫膨脹,以包含所有已發佈標籤的所有版本。

這導致我們將我們的標籤放置在與Trunk相同的層級。

EG:

- Common 
|- Trunk 
|- Tag_1.0.0 
- OtherProject 
|- Trunk 
|- Tag_1.0.0 

我們不能是唯一的誰有這個問題,所以我很好奇聽到的話,任何人有這個戰鬥獸和他們做了什麼來解決它?我們的方法是錯誤的還是我們忽略了一個可以幫助解決這個問題的工具?

回答

1

,我能想到的另一種選擇,而不是檢查出所有的該項目直接出來,你可以使用svn:externals功能。

例如,你的主要項目將OtherProject,那麼你可以定義依賴於Common項目爲SVN:在OtherProject你想要的結構外。

詳情請參閱svn book on externals

+0

實際上一個好主意,一個我們差點去的。在我們決定反對到底只是在大小的檢出會如果我們的共享庫中每個引用的應用程序單獨被檢出成了。這是我見過的最好的答案,所以我會給它一個答案,但我開始想,也許我的錯誤是試圖符合標準,即使它不適合我們(這些例子中的大多數似乎像他們想的,做了幾個大項目,一個公司工作的偉大,但是這不符合我們的商業模式。我們有很多的共享代碼一噸的小項目)。 – fyjham 2009-11-26 10:59:43

0

看起來你正在檢查整棵樹嗎?只是檢查出你所需要的標籤/樹幹,所以他們都在同一水平,即:

  • 退房Common/Tag_1.0.0到名爲Common
  • 退房OtherProject/TrunkOtherProject本地目錄,旁邊Common

然後OtherProject可以參考Common中的文件作爲../Common/<whatever>

+0

我們一般保持我們簽在同一個文件夾結構作爲我們的SVN倉庫,不同的人採取不同的方法對檢出 - 最要麼做一個「更新深度」的文件夾結構爲基礎的結算,然後檢查了內單個文件夾。我真的不喜歡做開發到SVN的不同所需要的文件夾結構的想法,它的開銷增加了檢出,並且在我看來,像它開啓了大門,螺絲起坐(一不留神簽出一個標籤來命名錯誤的文件夾和對錯誤的代碼或東西)......建築這真的是大多數人做的還是? – fyjham 2009-11-26 01:16:49

0

如果所有的項目都沒有自己的發佈週期,即總是在同一個時間發佈,那麼你可以使用

\trunk 
    - Common 
    - OtherProject 
\tags 
    \ Tag_1.0.0 
     - Common 
     - OtherProject 
+0

不幸的是,它們並不都是在一個發佈時間表上 - 我們有很多不同的項目在他們自己的時間表上發佈,有很多不同的相互依賴關係引用了其他項目的各種標籤(至少沒有循環依賴) – fyjham 2009-11-26 03:48:05