我一直在努力規範源控制結構爲我們在新的一年Team Foundation Server的部署。我已經開始使用CodePlex上提供的Microsoft Team Foundation Server Branching Guidance文檔。Team Foundation Server的源代碼控制結構
我希望能得到一些反饋,並回答幾個我對擬議結構的具體問題。當談到在TFS中構建源代碼控制時,我已經瞭解到有太多的「標準」可供選擇,並沒有真正的標準。
首先,我將概述,並描述決定和使用情況。
$/
{Team Project}/
{Subproject}/
Development/
Trunk/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Integration/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Production/
Releases/
{Release Version}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
Branches/
{Branch Name}/
Source/
Tests/
Sandcastle/
TeamBuildTypes/
{Build Name}/
一般的邏輯是,一個團隊項目可以包含一個單一的邏輯項目(其中將不會有{Subproject}
條目)或多個相關項目的產品或工具套件的形式。三大容器稱爲Development
,Integration
和Production
。
在Development
容器的Trunk中,Source
文件夾中包含構成產品的兩個項目都有相應的規定,Tests
文件夾中提供了相應的單元測試。大多數未成年人的發展會好發於軀幹,與通過Trunk
文件夾的同級Branches
文件夾,它作爲一個分支容器分支提供。一個或多個解決方案文件將存在於Trunk
之內,允許該級別的分支機構捕獲解決方案,源代碼和單元測試。
Integration
容器在非TFS實現中通常被稱爲「主」,僅用於集成來自Development
的變更集以創建穩定且可測試的構建。一旦達到可測試產品,它最初是作爲從Development
容器的分支創建的。此容器的構建將用於我們的測試環境和負載測試環境。我們選擇包含可測試構建的負載測試,以便我們可以監控性能變化,能夠快速隔離可能導致任何違規行爲的變更集。
Production
被用於生產預生產和生產質量的基礎之上。一旦建議發佈穩定版本,它最初是作爲Integration
容器的分支創建的。在Releases
文件夾中,遵循「按發佈分支」結構,在一個位置提供快照和隔離。 (例如,當Release 1.1
已準備好預生成版本時,穩定的Integration
容器會分支到Production/Releases
結構中的新文件夾Release 1.1
後續RC和RTW/RTM也被提升到此文件夾中。)分支結構也存在,如在Branches
容器中所見。這允許「修補程序」,通常是修訂標記(Major.Minor.Revision)。該分支從當前版本創建併合並回新版本標記 - 如Release 1.1.1
。在接受之後,Changeset將被逆向整合到Development
集裝箱的Trunk
。
我們覺得這種結構在健壯性和複雜性之間是一個公平的平衡。但是有一些嘮叨的問題,我無法在邏輯上適合模型。它們是:
團隊建設 - 該Development
和Integration
容器將首先開始了爲每晚構建,最終轉向持續集成(CI)。生產容器將被手動構建。
構建定義應該在哪裏生存?編輯 - 基於幾個響應,TeamBuildTypes文件夾已被移動到樹幹並分支到適當的容器。但是,這會產生一個新的問題(如下)。通過將TeamBuildTypes文件夾放在適當的容器中,這是否意味着所有構建定義將在適當的文件夾之間進行復制?例如,具有開發質量的構建定義以及可測試構建等,所有這些構建都存在於整個結構中的所有TeamBuildType文件夾中。
文檔生成 - 我們使用桑德爾卡瑟生成文檔。具體而言,我們也使用Sandcastle Help File Builder來管理輸出。這會生成一個專用於SFHB格式的項目文件。
應該將生成的文檔存儲在源代碼管理結構中嗎?
應該爲每個容器生成文檔還是隻對生產前質量和生產質量具有價值?
爲了保持快速的本地構建時間,文檔創建應該由構建定義擁有嗎?
SHFB特定文件應該在哪裏存在?我最初的想法是把它作爲同行到我同意推薦,它是Source
和Tests
文件夾。Source
和Tests
的同行。圖表已更改以反映此更改。
第三方二進制
應的二進制文件(控制,圖書館等)被存儲在源控制?
如果是這樣,它應該是它自己的團隊項目嗎?
一般文獻 - 非生成的文檔,例如要求,設計文檔,測試計劃等不打算由源控制結構的文件夾中反映出來。在與我的開發人員和同行進行了一些研究和討論之後,使用Team Explorer中的內置Documents文件夾提供了更多好處,因爲它反映了Team Project Portal中的結構,並且一些(商業)用戶不需要額外的複雜學習源代碼控制方面的TFS。
我將更新結構,因爲我得到問題的答案以提供更清晰的圖像。我也歡迎任何其他有關潛在變化的評論。如果我有任何其他問題,我會確保修改這篇文章。
編輯:
澄清。
Source
和Tests
文件夾也位於Integration
容器下。Micah和Josh都提到了關於第三方二進制文件的好處。問題添加了問題。
文檔生成可能會很慢。添加了關於文檔創建是否應由特定團隊構建類型擁有的問題。
新增解決涉及非生成的文檔,如需求,設計文檔,測試計劃等
新增的分辨率有關TeamBuildTypes文件夾構建defintions。
根據各種反饋,將TeamBuildTypes文件夾移至中繼線/分支級別。
你拼錯地基:) – thmsn 2008-12-19 13:54:31
這是一個非常棒的佈局和解釋。 – Micah 2008-12-19 13:59:13
呃!謝謝,thmsn! – 2008-12-19 14:00:26