【转】TFS上分支和标签的用法
什么時(shí)候用分支:??例如為某個(gè)客戶(hù)定制的專(zhuān)用版本,和主干的特性有很大差別.不具通用性的需求.
?????????????????????? 大的版本修改,例如2.0 到3.0 加了很多特性,但2.0 還有維護(hù).改bug
?
什么時(shí)候用標(biāo)簽:?小版本的發(fā)布, 如2.1.1到2.1.2.
?
?
?
分支的優(yōu)點(diǎn): 清晰,容易操作,程序員只要get latest/checkin?latest就可以了
?
分支的缺點(diǎn): 合并比較麻煩,?解決方法是要么是定期同步或者干脆不同步.
?
?
?
標(biāo)簽的優(yōu)點(diǎn): 靈活
標(biāo)簽的缺點(diǎn): 如果要對(duì)某個(gè)label的版本進(jìn)行hotfix, 操作起來(lái)比較麻煩, 要先get specific version by label, 然后修改代碼,checkin之后會(huì)產(chǎn)生一個(gè)新的changeset, 然后在一個(gè)workspace里面get labelversion,然后get changset, 重新label一個(gè)version.來(lái)發(fā)布hotfix. 發(fā)布之后還要把之前l(fā)atest的代碼copy一份,重新check in latest
?
========================================
有策略地進(jìn)行分支
源代碼是開(kāi)發(fā)工作中的一項(xiàng)重要資產(chǎn)。但如何在多個(gè)開(kāi)發(fā)人員同時(shí)處理文件更新時(shí)有效管理和演化源文件成為了一個(gè)難題。可以使用版本控制系統(tǒng)在共享儲(chǔ)存庫(kù)中存儲(chǔ)源代碼、隔離并行開(kāi)發(fā)工作、集成代碼更改以及恢復(fù)以前的文件版本。版本控制中的一個(gè)關(guān)鍵元素是分支,利用分支可進(jìn)行同步開(kāi)發(fā)。如果有策略地進(jìn)行分支,則可保持軟件的多個(gè)版本的順序和一致性。
Team Foundation 提供一個(gè)靈活可靠的版本控制系統(tǒng)。您可以使用 Team Foundation 版本控制管理開(kāi)發(fā)源代碼、文檔、工作項(xiàng)和由團(tuán)隊(duì)處理的其他關(guān)鍵信息的過(guò)程中的多個(gè)版本。有關(guān) Visual Studio Team Foundation Server 中的版本控制的更多信息,請(qǐng)參見(jiàn)使用版本控制。
在通過(guò)多個(gè)項(xiàng)目發(fā)布同時(shí)引入了多個(gè)更改時(shí),團(tuán)隊(duì)如何管理代碼?
在使用版本控制系統(tǒng)時(shí),您必須考慮如何設(shè)置分支結(jié)構(gòu)。可以通過(guò)鏡像源代碼文件來(lái)創(chuàng)建一個(gè)分支。然后,可以在不影響源的情況下更改該分支。例如,如下圖的分支結(jié)構(gòu)所示,MAIN 分支包含已通過(guò)集成測(cè)試的已完成功能,而 DEVELOPMENT 分支包含團(tuán)隊(duì)正在構(gòu)建的代碼。當(dāng) DEVELOPMENT 分支中的新功能完成并可通過(guò)集成測(cè)試時(shí),您可以將代碼從 DEVELOPMENT 分支提升到 MAIN 分支中。此過(guò)程稱(chēng)為“反向集成”。反之,如果您將代碼從 MAIN 分支合并到 DEVELOPMENT 分支中,則此過(guò)程稱(chēng)為“正向集成”。
?
有關(guān)如何創(chuàng)建和合并代碼分支的更多信息,請(qǐng)參見(jiàn) CodePlex 網(wǎng)站上的以下頁(yè)面:Team Foundation Server Branching Guide 2.0(Team Foundation Server 分支指南 2.0)。
分支和合并需要遵循下列原則:
每個(gè)分支都必須具有一個(gè)定義的策略,此策略與如何將代碼集成到相應(yīng)分支中有關(guān)。例如,在上圖的分支結(jié)構(gòu)中,可以指定一個(gè)團(tuán)隊(duì)成員來(lái)?yè)碛泻凸芾?MAIN 分支。該成員負(fù)責(zé)執(zhí)行初始分支操作、將更改從 DEVELOPMENT 分支反向集成到 MAIN 分支,以及將更改從 MAIN 分支正向集成到 DEVELOPMENT 分支。當(dāng) MAIN 分支也從其他分支集成更改時(shí),正向集成非常重要。
MAIN 分支必須包含已通過(guò)集成測(cè)試的代碼,以便始終準(zhǔn)備進(jìn)行發(fā)布。
由于團(tuán)隊(duì)成員會(huì)定期簽入更改,因此 DEVELOPMENT(或工作)分支將不斷演變。
標(biāo)簽是分支中的文件在某個(gè)特定時(shí)間的快照。
有關(guān)更多信息,請(qǐng)參見(jiàn)使用標(biāo)簽獲取文件快照。
利用 Team Foundation Build,可以從分支的幾種生成類(lèi)型中進(jìn)行選擇:手動(dòng)、連續(xù)、封閉、滾動(dòng)和計(jì)劃。建議 MAIN 分支具有封閉簽入生成類(lèi)型。這意味著,DEVELOPMENT 分支必須先通過(guò) MAIN 分支的所有要求,然后您才能提交反向集成。DEVELOPMENT 分支應(yīng)運(yùn)行連續(xù)生成類(lèi)型,因?yàn)閳F(tuán)隊(duì)必須盡快了解影響 DEVELOPMENT 分支的新簽入的發(fā)生時(shí)間。
團(tuán)隊(duì)?wèi)?yīng)采用何種頻率進(jìn)行反向集成和正向集成?
如下圖所示,反向集成和正向集成應(yīng)至少在用戶(hù)情景完成時(shí)進(jìn)行。雖然每個(gè)團(tuán)隊(duì)對(duì)于完成的定義可能不同,但完成用戶(hù)情景通常意味著完成了功能和對(duì)應(yīng)的單元測(cè)試。只能在單元測(cè)試驗(yàn)證 DEVELOPMENT 分支的穩(wěn)定性后反向集成到 MAIN 分支中。
?
如果您具有多個(gè)工作(即 DEVELOPMENT)分支,則當(dāng)任意分支集成到 MAIN 分支時(shí)應(yīng)立刻正向集成到所有工作分支。因?yàn)?MAIN 分支保持穩(wěn)定,所以正向集成是安全的。工作分支中可能會(huì)發(fā)生某些沖突或失敗,這是因?yàn)闊o(wú)法保障工作分支是穩(wěn)定的。
應(yīng)盡快解決所有沖突,這非常重要。通過(guò)對(duì) MAIN 分支使用封閉簽入,可以使反向集成變得簡(jiǎn)單得多,因?yàn)橘|(zhì)量要求可幫助避免 MAIN 分支中發(fā)生沖突或錯(cuò)誤。有關(guān)更多信息,請(qǐng)參見(jiàn)簽入到由封閉簽入生成過(guò)程控制的文件夾。
團(tuán)隊(duì)如何管理實(shí)現(xiàn)不同用戶(hù)情景的源?
如下圖所示,可以定期將更改簽入工作分支以完成用戶(hù)情景。可以在同一分支中同時(shí)實(shí)現(xiàn)多個(gè)用戶(hù)情景,但僅當(dāng)所有進(jìn)行中的工作都已完成時(shí)才能反向集成到 MAIN 分支。建議您按照類(lèi)似大小對(duì)用戶(hù)情景進(jìn)行分組,因?yàn)槟幌M笥脩?hù)情景阻止多個(gè)小用戶(hù)情景的集成。可以將兩組用戶(hù)情景拆分為兩個(gè)分支。
?
團(tuán)隊(duì)?wèi)?yīng)在何時(shí)添加分支?
以下情況下應(yīng)創(chuàng)建分支:
-
在必須按與現(xiàn)有分支不同的時(shí)間表/周期發(fā)布代碼時(shí)。
-
在代碼需要不同的分支策略時(shí)。如果創(chuàng)建具有新策略的新分支,則可以為項(xiàng)目增添策略?xún)r(jià)值。
-
在向客戶(hù)發(fā)布功能且團(tuán)隊(duì)打算進(jìn)行不影響計(jì)劃的發(fā)布周期的更改時(shí)。
不應(yīng)對(duì)每個(gè)用戶(hù)情景創(chuàng)建分支,因?yàn)檫@會(huì)產(chǎn)生較高的集成成本。雖然通過(guò)? 可方便地進(jìn)行分支,但在分支很多時(shí),管理分支的開(kāi)銷(xiāo)可能會(huì)很大。
從版本控制的角度,團(tuán)隊(duì)如何管理發(fā)布?
團(tuán)隊(duì)?wèi)?yīng)能在任意沖刺 (sprint) 末尾發(fā)布代碼。通過(guò)使用 Team Foundation Server,可以標(biāo)記一個(gè)分支以在某個(gè)特定時(shí)間點(diǎn)為代碼拍攝快照。如下圖所示,可以為發(fā)布標(biāo)記 MAIN 分支。這樣,您可以將分支返回到此時(shí)間點(diǎn)時(shí)的狀態(tài)。
?
因?yàn)楸仨氃诎l(fā)布時(shí)實(shí)現(xiàn)更新,所以為發(fā)布創(chuàng)建分支可幫助團(tuán)隊(duì)繼續(xù)獨(dú)立處理下一個(gè)沖刺 (sprint),而不會(huì)與將來(lái)的發(fā)布產(chǎn)生沖突。下圖顯示了一個(gè)分支,該分支包含更新代碼,隨后在第二個(gè)沖刺 (sprint) 末尾進(jìn)行發(fā)布后,該分支反向集成到 MAIN 分支。
?
在為發(fā)布創(chuàng)建分支時(shí),應(yīng)從 MAIN 分支(該分支最穩(wěn)定)創(chuàng)建分支。如果您從工作分支對(duì)發(fā)布進(jìn)行分支,則會(huì)導(dǎo)致集成問(wèn)題,因?yàn)闊o(wú)法保證工作分支的穩(wěn)定性。
http://msdn.microsoft.com/zh-cn/library/ee782536.aspx
?
http://msdn.microsoft.com/zh-cn/magazine/gg598921.aspx
?
?
==================
標(biāo)簽是邏輯上的
分支是物理上的
標(biāo)簽歷史版本比較、在修改時(shí),中間做應(yīng)急發(fā)布不方便,多任務(wù)并發(fā),多團(tuán)隊(duì)合作有問(wèn)題,客戶(hù)端一個(gè)版本。
分支可在任意時(shí)刻在主線(xiàn)上發(fā)布、修復(fù)應(yīng)急bug、專(zhuān)用版不影響主線(xiàn),客戶(hù)端多個(gè)版本,容易混亂。
標(biāo)簽和分支的作用:大版本區(qū)分。
標(biāo)簽在出現(xiàn)hotfix,并發(fā)任務(wù),人員放假回家的情況,大團(tuán)隊(duì)作業(yè)的情況確實(shí)不好。
?
總結(jié)
以上是生活随笔為你收集整理的【转】TFS上分支和标签的用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一步步编写操作系统3 部署工作环境 3
- 下一篇: 【转】SharePoint 2010 用