TFS分支,有什麼優勢

那麼分支是什麼意思?我知道必須有一個巨大的優勢,但我無法理解.

(更新:TFS現在支援git進行版本控制,因此此答案的其餘部分不再適用)

我會谷歌分支每個功能.

分支的主要優點是您可以處理某個功能,而不會被其他任何人的工作打斷.準備好後,您可以合併並檢視是否有許多功能可以很好地協同工作.這通常是在開發功能時完成的,但是一旦功能完成,就可以完成小功能.

優點是您可以清楚地瞭解實施某些操作所做的工作.如果沒有分支,您將有大量的提交與其他功能的提交混合在一起.如果QA沒有通過某個功能,那麼您只需要使用其他功能的提交將您的工作組合在一起.另一種方法是嘗試修復您的功能,以便QA通過.這可能在星期五下午不可行.

功能切換是省略工作的另一種方式,但這會增加程式碼的複雜性,切換本身也可能存在錯誤.這是非常厭倦的事情,看看這是如何成為一個“可接受的”解決方案.

分支還用於跟蹤多個版本的發行版的更改.多個客戶使用的產品可能處於這樣的情況:一組客戶使用1.0的產品,而其他客戶已使用2.0.如果同時支援兩者,則應通過指定給它們的分支跟蹤每個更改.以前的觀點仍然適用於這些分支機構的開發.

話雖如此,由於多種原因,TFS在每個功能分支上並不理想.最大的是它不支援3路合併 – 它只有所謂的無基礎合併.跟蹤歷史記錄的方式,TFS無法顯示功能分支與您嘗試將其合併到的位置之間的共同祖先.這使您可以解決許多衝突.一般來說,很多使用TFS的人因為這個原因而回避分支.

3向合併很棒,因為它們會向您展示共同的祖先是什麼,您的更改是什麼以及其他分支的變化是什麼.這將使您能夠就如何解決衝突做出非常有根據的決定.

如果你必須使用TFS,我建議使用git-tfs來利用3向合併和許多其他功能.其中一些包括:rerere,rebasing,disconnect model,local history,bisect等等.

Rebase非常有用,因為它允許您將功能更改為基於另一個起點,省略提交,壓縮提交,拆分提交等.一旦準備就緒,您可以將它們合併到整合或釋出分支中,具體取決於工作流程你決定了.

Mercurial也是另一個可能更容易使用的,但從長遠來看不會那麼強大.

如果你有機會,我強烈建議遠離TFS進行原始碼控制,因為與現代DVCS相比存在很多限制.

如果您想要有效地管理分支/合併,這裡有一套很好的指導原則:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

希望這可以幫助.

翻譯自:https://stackoverflow.com/questions/6208930/tfs-branching-what-are-the-advantages