2010-09-04 71 views
0

使用版本控制時,歷史記錄通常看起來像一個平面修訂版鏈。組織層次結構有一些基本的機制(我指的是分支機構),但它看起來不夠靈活。什麼是常用實踐(版本控制不可知)來組織多級別層次結構中的修訂,以及什麼是版本控制工具特定的陷阱?如何組織層次結構中的修訂?

我會從我的實踐中提供一個微不足道的現實世界的例子,它引導我回到這個問題。

假設我想重構一個函數/類的方法。我創建一張票並命名爲「重構方法ClassName.method_name()」。在研究了method_name()的代碼之後,我將重構過程劃分爲子任務。爲了簡單起見,讓我們考慮我需要在代碼中重新命名具有不同含義的兩個變量,所以我需要在兩個不同的原子步驟中完成它。我重命名一個變量,保存更改並在消息「中重命名爲ClassName.method_name()」中的foo變量「(因爲提前提交併且提交通常很好)。我重複第二個變量:「在ClassName.method_name()」中重命名的bar變量「。

現在我有問題跟蹤一票,命名爲「重構方法ClassName.method_name()」,並在版本控制兩個版本:

  • 「在ClassName.method_name()更名爲富變量」
  • 「更名爲ClassName.method_name酒吧變量()」

在哪裏的問題,這兩個版本之間的關係?我迷路了!

我的目標是有一個這樣的邏輯層次: 「)重構方法ClassName.method_name(」 「在ClassName.method_name)更名爲富變量(」

    • 「在ClassName.method_name()更名巴變量」

氖無條件地說我正在尋找一般的工作流程,這將允許創建像這樣的多級層次結構。每一層次的項目可以是一個修訂版本或一張票證,一張票連續修訂鏈固定的情況只是一個特例。

這樣做很有意義,我很喜歡使用大綱和將數據組織到使用樹的層次結構中。

人們在版本控制中如何做到這一點?有許多版本控制工具,每個都有他們的微妙之處,有些允許將第三方錯誤跟蹤器直接放入存儲庫,有些甚至還集成了錯誤跟蹤(如fossil),所以請詳細說明特定版本控制工具的工作流程。

回答

0

你想要什麼叫做功能分支,是分佈式版本控制的一個非常常見的工作流程。對於你的例子,它會像這樣:

  • 從你的主幹創建一個名爲「重構方法」的分支。
  • 從名爲「rename foo」的「重構方法」分支創建分支。
  • 爲了重命名foo,在進行「重命名foo」分支時做所有工作。
  • 將「重命名foo」合併回「重構方法」。
  • 從名爲「重命名欄」的「重構方法」分支創建分支。
  • 做你所有的重命名欄工作,在你走的時候進入「重命名欄」分支。
  • 將「重命名欄」合併回「重構方法」。
  • 將「重構方法」合併回您的主幹。

顯示與圖形工具主幹分支將只顯示「重構法」有一個加號或東西展開,有點像這樣:

from softwarewhys.wordpress.com 。點擊加號會顯示「重命名foo」和「重命名欄」。再次點擊會顯示所有的單個步驟。此外,這項工作可以同時進行,人們以不同於檢出的順序檢入,並且您仍然可以獲得分層歷史記錄。在我的圖表中,你可以看到阿諾德在艾米分流她的改變後檢查了他的錯誤修復,但是歷史仍然有效。

+0

謝謝,它看起來很平滑。我預見這個工作流程至少可以與bzr,mercurial,git和化石一起工作。但如何處理不支持顯式分支的版本控制工具?我的意思是達爾奇在這裏。 – 2010-09-05 01:35:41