我已經贏得了使用Git或Subversion重組/重建現有代碼存儲庫的任務。在這種特殊情況下,資料庫歷史記錄不一定非常重要。在分析情況後,我發現一些問題決定了一個好的佈局。我已經閱讀了很多博客和主題,但我仍然不確定什麼是最佳佈局。如何構建由多個庫和應用程序組成的存儲庫
現有的存儲庫包含一組包含文件,一組相互部分依賴的庫,其中許多庫依賴於一組包含文件。此外,還有兩個應用程序項目依賴於這組庫。此外,還有一組腳本使用其中一個應用程序和一些其他配置信息。我畫一個圖來說明情況:
+---------->include files
| ^
| |
library A -----> library B <----- library C <----- library D
^^ | ^
| | | |
| +--------------------------------+ |
| |
application 1 application 2 --------------------+
^
|
script -----> configuration information
的目標是讓每個組件可以被儘可能地獨立開發的佈局,有一個版本(對於外部客戶),它包含了一組所有組件都在定義的標籤版本中,以便可以及時回溯併爲特定版本構建軟件。
我想出如下結構:
trunk/
include/
lib/
library A/
library B/
library C/
library D/
app/
application 1/
application 2/
tags/
1.0/
include/
lib/
library A/
library B/
library C/
library D/
app/
application 1/
application 2/
1.1/
include/
lib/
library A/
library B/
library C/
library D/
app/
application 1/
application 2/
...
每次我創建一個新的版本我只想整個存儲庫複製到一個新的子目錄中的標籤。
此解決方案的問題在於,庫本身沒有單獨的標記目錄,而且我只想擁有由標記的組件組成的版本,並且此解決方案不顯示哪些組件具有哪些標記版本發佈。我曾考慮過使用單獨的存儲庫,然後創建一個主存儲庫,該存儲庫具有一個releases子目錄,其中我使用`svn:externals'和特定的標籤子目錄鏈接所有必需的組件,但不同的庫和包含文件相互依賴,看不出如何將代碼分成不同的實體。
任何想法?
===============問題繼續28-1-2011 ===============
好,我繪製了我如何規劃新佈局的圖表。我們的目標是將 各種依賴關係的標記與一個 存儲庫中的svn:externals方法鏈接起來,例如我將012/中的svn:externals設置爲^/tags/projects/include中的trunk/projects/lib/library2/dependencies /std/1.3。
trunk/
projects/
include/
std/
lib/
library1/
dependencies/
std/ --> tags/projects/include/std/1.2
library2/
dependencies/
std/ --> tags/projects/include/std/1.2
library1/ --> tags/projects/lib/library1/1.4.3
library3/
dependencies/
std/ --> tags/projects/include/std/1.3
library1/ --> tags/projects/lib/library1/1.4
app/
application1/
dependencies/
library3/ --> tags/projects/lib/library3/1.1
application2/
dependencies/
library1/ --> tags/projects/lib/library1/2.1
application3/
dependencies/
std/ --> tags/projects/include/std/1.2
library2/ --> tags/projects/lib/library2/1.5.2
config/
configuration1/
dependencies/
application1/ --> tags/projects/app/application1/2.3
configuration2/
dependencies/
application1/ --> tags/projects/app/application1/1.6
configuration2/
dependencies/
application2/ --> tags/projects/app/application1/1.6
tags/
projects/
include/
std/
1.2/
1.3/
lib/
library1/
1.4.3/
1.4/
2.1/
library2/
1.5.2/
library3/
1.1/
app/
application1/
1.6/
2.3/
branches/
...
剩下的問題:
- 這是設計可行的,還是你看到任何重大的缺點?
- 如果我將庫複製到標記目錄會發生什麼?這也會複製 svn:externals屬性。這會導致問題,還是這種行爲需要?
- 我可以爲所有外部指定顯式修訂,但標籤不應該改變,所以不會改變目錄嗎?
- 將存儲庫拆分爲開發存儲庫和使用svn:external的存儲庫是一個更好的解決方案嗎?請參閱What's the benefits of "svn:externals"?問題的答案'用例'。
你的問題與Git有什麼關係?你已經展示的結構完全是Subversion特有的。 – ssmir 2011-01-25 18:14:44
繼Google/Wikipedia之後,Git支持真正的標記,問題與標記有關。所以如果可以用Git創建一個比Subversion更好的解決方案,我可能只需切換到Git。我不依賴於Subversion,只是在OSS上。 – hochl 2011-01-25 20:31:19