策略上的分支
原始程式碼是您開發工作中的一項重要資產。 但在多名開發人員同時處理檔案更新時,要有效管理及設計原始程式檔,可能是一項難題。 您可以使用版本控制系統將原始程式碼儲存在共用儲存機制中,以隔離平行開發工作、整合程式碼變更,以及復原先前的檔案版本。 版本控制的重要項目之一,是可啟用同時開發的分支功能。 如果您策略性地執行分支,您將可維護多個軟體版本間的順序與一致性。
Team Foundation 提供富彈性而可靠的版本控制系統。 您可以使用 Team Foundation 版本控制,在開發原始程式碼、文件、工作項目以及小組處理的其他重要資訊期間,管理多個修訂版本。 如需在Visual Studio Team Foundation Server中的版本控制的詳細資訊,請參閱使用版本控制。
透過數個專案版本同時引入多項變更時,小組要如何管理程式碼?
在使用版本控制系統時,您必須考量如何設定分支結構。 您可以對原始程式碼檔執行鏡像,以建立分支。 接著,您可以在不影響來源的情況下變更分支。 舉例來說,如下圖中的分支結構所示,MAIN 分支包含已完成並已順利通過整合測試的功能,而 DEVELOPMENT 分支則包含建構中的程式碼。 當 DEVELOPMENT 分支中的新功能完成並通過整合測試時,您可以將程式碼從 DEVELOPMENT 分支升階至 MAIN 分支。 此流程稱為反向整合。 相反地,將程式碼從 MAIN 分支合併到 DEVELOPMENT 分支的流程,則稱為正向整合。
如需如何建立與合併程式碼分支的詳細資訊,請參閱 CodePlex 網站上的下列網頁:Team Foundation Server Branching Guide 2.0 (英文)。
分支與合併伴隨著下列概念:
每個分支都必須要有如何將程式碼整合到該分支中的相關定義原則。 以上圖中的分支結構為例,您可以指派讓某個小組成員擁有及管理 MAIN 分支。 此成員需負責執行初始分支作業、將變更從 DEVELOPMENT 分支反向整合至 MAIN 分支,以及將變更從 MAIN 分支正向整合至 DEVELOPMENT 分支。 如果 MAIN 分支也整合來自其他分支的變更,正向整合就很重要。
MAIN 分支必須包含已通過整合測試、而可隨時準備發行的程式碼。
DEVELOPMENT (或工作) 分支會持續發展,因為小組成員會定期簽入變更。
標籤是分支中特定時間點的檔案快照。
如需詳細資訊,請參閱使用標籤來建立檔案的快照。
Team Foundation Build 允許您從您分支組建的數種種類中選擇:手動執行、連續性、閘道、滾動及排程。 我們建議 MAIN 分支使用閘道簽入組建類型。 這表示 DEVELOPMENT 分支必須在您能認可反向整合之前通過 MAIN 分支的所有需求。 DEVELOPMENT 分支應執行連續組建類型,因為在進行會影響 DEVELOPMENT 分支的新簽入時,小組必須盡快得知。
小組應多久進行一次反向整合與正向整合?
如下圖所示,反向整合與正向整合至少應在您完成使用者劇本時執行。 雖然每一個小組對於完成可能有不同的定義,但是完成使用者劇本通常是指功能和對應的單元測試皆已完成。 只有在單元測試驗證 DEVELOPMENT 分支的穩定性後,您才能反向整合至 MAIN 分支。
如果您有多個工作 (DEVELOPMENT) 分支,則在任何分支整合至 MAIN 分支時,即應執行正向整合至所有工作分支的作業。 由於 MAIN 分支維持穩定狀態,因此正向整合安全無虞。 工作分支有可能因為您無法確保工作分支的穩定性而發生衝突或失敗。
請務必盡快解決所有衝突。 對 MAIN 分支使用閘道簽入,可讓反向整合變得容易得多,因為品質閘道有助於避免 MAIN 分支發生衝突或錯誤。 如需詳細資訊,請參閱簽入由閘道簽入建置流程所控制的資料夾。
小組如何管理可實作不同使用者劇本的來源?
如下圖所示,您可以定期對工作分支簽入變更,以完成使用者劇本。 您可以同時在同一分支中實作多個使用者劇本。 但您只有在完成所有進行中的工作後,才能反向整合至 MAIN 分支。 建議您將大小相近的使用者劇本歸類在一起,因為您不希望有許多小型使用者劇本的整合作業受到大型使用者劇本封鎖。 您可以將兩組使用者劇本分割成兩個分支。
小組何時應該新增分支?
您應在下列情況下建立分支:
當您必須在不同於現有分支的排程/週期下發行程式碼時。
當程式碼需要不同的分支原則時。 如果您建立了具有新原則的新分支,您可以在專案中加入策略值。
將功能發行給客戶時,小組計劃進行對已規劃的發行週期沒有影響的變更。
您不應為每個使用者劇本建立分支,因為這需要很高的整合成本。 雖然 可以輕易建立分支,但是在擁有許多分支的情況下,管理分支的額外負荷可能會變大。
小組如何從版本控制的觀點管理發行?
您的小組應該能夠在任何期程 (Sprint) 結束時發行程式碼。 您可以使用 Team Foundation Server為分支加上標籤,以擷取程式碼在特定時間點的快照。 如下圖所示,您可以為 MAIN 分支加上發行的標籤。 這可讓您以此分支的狀態回到這個時間點的狀態。
由於您必須對發行版本實作更新,因此為發行版本建立分支,將可協助小組在下一次期程時繼續獨立作業,而不會與後續的發行版本產生衝突。 下圖顯示的分支包含更新的程式碼,而且在第二次期程的結尾進行發行之後,會反向整合回到 MAIN 分支中。
當您為發行版本建立分支時,您應該根據最穩定的 MAIN 分支來建立分支。 根據工作分支為發行版本建立分支可能帶來各項整合挑戰,因為工作分支的穩定性是無法保證的。