我們在我們公司做的是建立一個工具存儲庫,然後項目存儲庫。該工具庫是Subversion版本庫,安排如下:
/svn/tools/
vendor1/
too11/
1.0/
1.1/
latest = a copy of vendor1/tool1/1.1
tool2/
1.0/
1.5/
latest = a copy of vendor1/tool2/1.5
vendor2/
foo/
1.0.0/
1.1.0/
1.2.0/
latest = a copy of vendor2/foo/1.2.0
每次我們得到供應商的工具的新版本,它是根據其供應商,名稱添加和版本號,以及'最新'標籤已更新。
[說明:這不是一個典型的源代碼庫 - 它的目的是存儲特定版本的'已安裝'圖像。因此/svn/tools/nunit/nunit2/2.4將是包含將NUnit 2.4安裝到目錄並將其導入工具存儲庫的結果的目錄樹頂部。可能存在源代碼和示例,但主要關注的是使用該工具所必需的可執行文件和庫。如果我們需要修改供應商工具,我們會在單獨的存儲庫中執行此操作,並將結果發佈到此存儲庫。 ]
其中一個供應商是我公司,並有每個工具,組裝,無論我們在內部發佈一個單獨的部分。
的項目庫是一個標準的Subversion版本庫,與樹幹,標籤,樹枝和你通常的預期。任何給定的項目將是這樣的:
/svn/
branches/
tags/
trunk/
foo/
source/
tools/
publish/
foo-build.xml (for NAnt)
foo.build (for MSBuild)
的工具目錄下有一個顛覆的svn:externals的屬性集,在相應的版本鏈接的每個工具或組裝的(或者是特定的版本或「最新」),其該項目需要。當'foo'項目由CruiseControl構建時。NET,發佈任務將填充「發佈」目錄作爲「富」組件預定部署,然後執行以下顛覆命令:
svn import publish /svn/tools/vendor2/foo/1.2.3
svn delete /svn/tools/vendor2/foo/latest
svn copy /svn/tools/vendor2/foo/1.2.3 /svn/tools/vendor2/foo/latest
開發人員在他們的項目中正常工作,並讓構建自動化負責細節。正常的顛覆更新將拉動最新版本的外部工具以及項目更新。
如果你有很多工具相互依賴性,你可以配置CruiseControl.NET(手工)來觸發它們的依賴關係發生變化時從屬項目的構建,但我們並不需要那麼做。
注意:爲清晰起見,所有Subversion存儲庫路徑都縮短了。我們實際上使用Apache + SVN和兩個獨立的服務器,但是您應該按照您認爲合適的方式進行調整。
這看起來像一個非常好,乾淨的方式 - 從我+1 +1 – 2008-09-20 13:35:43