2012-01-24 83 views
20

git分支機構目前有哪些最佳實踐是爲了測試bug的解決方案而創建的,並且尚未合併,因爲審查過程顯示它們錯誤或存在更好的解決方案。如何處理實驗性未合併的git分支?

一個例子。項目fizzbuzz有一個錯誤報告,報告空字段崩潰。

  • 我創建了一個新的分支handle-empty-fields,並對該分支做了兩個提交,「解決」了這個問題。
  • 然後,我將該分支提交給fizzbuzz項目經理,並將其鏈接到bug報告中。
  • 有人在我的修復程序中發現錯誤,寫入另一個修補程序並且該修補程序被接受。

現在在handle-empty-fields我的代碼的代碼是沒用的:這是不正確的,不能被任何更長的時間來代碼應用,但它已經在錯誤報告被引用。

我該怎麼辦?保持分支?我將很快結束與幾十個被遺棄的分支,git無法將分支標記爲廢棄或關閉。刪除分支?但是那些查看這個bug報告的人會找到它並得到404.

人們經常建議不要重新佈局他們的存儲庫,因爲這會給其他開發者,尤其是下游開發者帶來問題。功能或錯誤修復分支的建議是什麼?

更新:它看起來像github永遠不會刪除包含在pull請求中的提交。所以,如果你推動你的改變,把他們變成一個拉取請求,你可以稍後刪除分支而不會丟失你的任何改變。那麼,雖然github仍在工作;)。

+0

相關問題:https://stackoverflow.com/questions/1307114/how-can-i-archive-git-branches –

回答

12

git update-ref refs/Attic/handle-empty-fields refs/heads/handle-empty-fields

作爲替代的標籤保留枯枝你可以使用單獨的參考命名空間。好處是標籤列表保持不變。一個缺點是從瓷器移動到管道水平的git。

+0

將這些類型的參考推送到遠程回購? – gioele

+0

@gioele他們可以推,因爲任何裁判都可以推。但是它們不會被默認推送,在命令行或配置中需要適當的refspec。 –

+4

+1僅用於瓷器/管道術語...... –

1

這只是我的觀點,但我想你可以隨意放棄任何沒有有用代碼的分支。在最糟糕的情況下,如果有人在某一天會查看錯誤報告,並會發現與拒絕錯誤修復的鏈接被破壞......呃,我認爲這對任何人都不是什麼大問題。

2

我認爲這將取決於具體情況。可能的解決方案:

  • 給bug報告添加一條評論,指出分支提到的結果是無用的並被刪除。如果你覺得這個分支有一些價值,請簡要描述你做了什麼。即使分支不在,人們也可以獲得必要的信息。

  • 保留分支,但以某種方式重命名它以將其標記爲「已放棄」。爲bug報告添加一條評論以表明這一點(並將鏈接更改爲分支)。例如,你可以有一些約定,例如在分支名稱前面添加「OLD-」。

  • 標記該分支,然後將其刪除(並再次提到這在bug數據庫條目)。這樣分支可以被移除,但提交仍然可以通過標籤訪問。請注意,git爲標籤(和分支)提供了簡單的名稱空間 - 您可以在名稱中包含「/」。您可以就約定達成一致,例如在「oldbranch /」下使用標籤。 (從Abizern的回答改編。​​

  • 一旦分支已合併,則可以只提/鏈接合併的bug報告提交。然後,分支可能不太有趣,因爲它包含在合併提交中。

通常,您可能希望爲錯誤修復分支採用特殊的命名約定。

在我的(個人)git repo中,對於每個bug,我發現我首先在bug DB中打開一個bug。如果我接着處理它,我創建一個名稱以bug ID結尾的分支(例如「opencrash-342」,「handle_empty_file-663」)。這樣錯誤數據庫和分支之間的關係是顯而易見的。另外,如果分支列表變得太長,你總是可以通過附加的ID進行過濾(例如,創建一個被關閉的錯誤列表,以及一些小腳本,將其過濾掉「git log」的輸出內容等)。 )。

+3

過濾的問題是,我可能是唯一一個安裝了這樣的過濾腳本,其他人將看到所有這些無用的分支。 – gioele

14

我這樣做的方式是給它一個標籤。使用完整的標籤,並給它一個描述性的名稱。然後你可以刪除分支,所以它不會出現在你的分支列表中,但是因爲它被標記了,分支仍然可以通過檢出分支來重新創建。所有標籤上的提交將仍然可用,也不會丟失任何提交的git gc事情是這樣的,也許:

git tag -a partialBugfixXXX -m"Tagging a branch that went into fixing bug XXX" 
+0

這是個好主意。不完美,因爲它只是將問題從分支列表移動到標籤列表,但至少標籤列表很少被查閱,而分支列表通常是經常看到的東西。 – gioele

+0

補充說明:您可以對標籤採用一些命名約定,例如爲帶有「分支」的短期分支添加標籤名稱的前綴。然後你可以過濾標籤列表,或者只是對它進行排序。 – sleske