naming-conventions branch命名規則 - git分支命名最佳實踐




name中文 commit (7)

我從我看過的不同方案中混合併匹配,並基於我正在使用的工具。 所以我完成的分支名稱是:

名稱/特徵/問題跟踪數/短說明

這將轉化為:

麥克/博客/ RSSI-12 /標誌修復

這些部分之間用正斜杠分隔,因為它們被解釋為SourceTree中的文件夾,以便於組織。 我們使用Jira進行問題跟踪,因此包含該號碼可以更輕鬆地在系統中查找。 在嘗試提交請求時,在Github內部查找該問題時,包含該數字也會使其可搜索。

現在,我已經使用了一個本地git存儲庫,與我的組的CVS存儲庫進行數月的交互。 我做了一個幾乎神經質的分支,其中大部分已經合併回我的箱子裡了。 但命名開始成為一個問題。 如果我有一個簡單的標籤命名任務,但是我分三個階段完成,每個階段都包含他們自己的分支和合併情況,那麼每次都可以重複分支名稱,但這會使歷史有點混亂。 如果我在名稱中更具體,每個階段都有單獨的說明,那麼分支名稱會變得漫長而笨拙。

我確實在這裡學習了通過舊線程的看法,我可以開始用名稱中的/來命名分支,即主題/任務,或類似的東西。 我可能會開始這樣做,看看它是否有助於保持組織更好。

命名git分支的一些最佳實踐是什麼?

編輯:實際上沒有人提出任何命名約定。 當我完成它們時,我會刪除分支。 由於管理層不斷調整我的優先事項,我恰好有幾處。 :)作為一個為什麼我可能需要在一個任務上有多個分支的例子,假設我需要將任務中的第一個離散里程碑提交給組的CVS存儲庫。 此時,由於我與CVS的交互不完善,我會執行該提交並殺死該分支。 (如果我試圖在這一點上繼續使用相同的分支,我已經看到了太多與CVS交互的奇怪現象。)


請注意,如提交e703d7提交b6c2a0d (2014年3月)所示,現在是Git 2.0的一部分,您會發現另一個命名約定(您可以應用於分支機構)。

“當你需要使用空間時,使用短劃線”是一種奇怪的說法,你不能使用空間。
由於命令行描述使用虛線多詞更常見,因此您甚至不想在這些位置使用空格。

分支名稱不能有空格(請參閱“ 分支名稱中的哪些字符不合法? ”和git check-ref-format手冊頁 )。

因此,對於將由多詞表達式表示的每個分支名稱,使用' - '(破折號)作為分隔符是一個好主意。


根據farktronix的建議,我們一直在使用Jira門票號碼進行類似的mercurial,我打算繼續將它們用於git分支。 但我認為票號本身可能是獨一無二的。 如farktronix指出的那樣,在分支名稱中使用描述性字詞可能會有所幫助,但如果您經常在分支之間切換,則可能需要輸入較少的字符。 然後,如果您需要知道分店名稱,請在Jira中查找相關的關鍵字(如果您不知道)。 另外,您應該在每條評論中包含票號。

如果你的分支代表一個版本,看起來公共慣例是使用分支名稱的xxx(例如“1.0.0”)格式和標籤名稱的vx.xx(例如“v1.0.0”)(以避免衝突) 。 另請參見: is-there-an-standard-naming-convention-for-git-tags


為什麼每個任務需要三個分支/合併? 你能解釋更多嗎?

如果您使用錯誤跟踪系統,則可以使用錯誤編號作為分支名稱的一部分。 這樣可以保持分支名稱的獨特性,並且可以在它們"ResizeWindow-43523"兩個簡短的描述性單詞,以保持它們的可讀性,如"ResizeWindow-43523" 。 它還可以幫助您在清理分支時更輕鬆,因為您可以查找相關的錯誤。 這是我通常如何命名我的分支。

由於這些分支最終會合併回主,因此合併後應該安全地刪除它們。 除非你和--squash合併,否則如果你需要的--squash ,分支的整個歷史將仍然存在。


以下是我使用的一些分支命名約定及其原因

分支命名約定

  1. 在分支名稱的開頭使用分組標記(單詞)。
  2. 定義和使用簡短的標記,以對工作流程有意義的方式區分分支機構。
  3. 使用斜杠來分隔部分分支名稱。
  4. 不要將裸露的數字用作主要部分。
  5. 避免長壽分支的長描述性名稱。

群組令牌

在分支名稱前使用“分組”標記。

group1/foo
group2/foo
group1/bar
group2/bar
group3/bar
group1/baz

無論您喜歡如何匹配您的工作流程,這些組都可以命名。 我喜歡用我的短名詞。 閱讀更清晰。

簡短定義的令牌

選擇簡短的令牌,這樣它們不會為每個分支名稱添加太多噪音。 我使用這些:

wip       Works in progress; stuff I know won't be finished soon
feat      Feature I'm adding or expanding
bug       Bug fix or experiment
junk      Throwaway branch created to experiment

這些令牌中的每一個都可以用來告訴您每個分支所屬的工作流程的哪一部分。

這聽起來像你有不同的變化週期的多個分支。 我不知道你的周期是什麼,但我們假設他們是'新','測試'和'驗證'。 您可以使用這些標籤的縮寫版本命名分支,總是以相同的方式拼寫,將它們分組,並提醒您您處於哪個階段。

new/frabnotz
new/foo
new/bar
test/foo
test/frabnotz
ver/foo

您可以快速確定哪些分支已經到達每個不同的階段,並且可以使用Git的模式匹配選項輕鬆地將它們分組在一起。

$ git branch --list "test/*"
test/foo
test/frabnotz

$ git branch --list "*/foo"
new/foo
test/foo
ver/foo

$ gitk --branches="*/foo"

使用斜杠來分隔零件

您可以在分支名稱中使用大多數您喜歡的分隔符,但我認為斜杠是最靈活的。 您可能更喜歡使用短劃線或點。 但斜線可讓您在推送或從遠程獲取/從遠程進行分支重命名。

$ git push origin 'refs/heads/feature/*:refs/heads/phord/feat/*'
$ git push origin 'refs/heads/bug/*:refs/heads/review/bugfix/*'

對於我來說,斜杠也可以更好地用於我的shell中的標籤擴展(命令完成)。 通過配置我可以通過輸入零件的第一個字符並按TAB鍵來搜索具有不同子部件的分支。 Zsh然後給我一個與我輸入的令牌部分匹配的分支列表。 這適用於先前的令牌以及嵌入式的令牌。

$ git checkout new<TAB>
Menu:  new/frabnotz   new/foo   new/bar


$ git checkout foo<TAB>
Menu:  new/foo   test/foo   ver/foo

(Zshell可以很好地配置命令完成,我也可以配置它來處理破折號,下劃線或點,但我選擇不這樣做。)

它還可以讓你在許多git命令中搜索分支,如下所示:

git branch --list "feature/*"
git log --graph --oneline --decorate --branches="feature/*" 
gitk --branches="feature/*" 

警告:正如Slipp在評論中指出的那樣,斜杠可能會導致問題。 因為分支被實現為路徑,所以不能有名為“foo”的分支和名為“foo / bar”的另一分支。 這可能會讓新用戶感到困惑。

不要使用裸數字

不要使用裸號碼(或十六進制數字)作為分支命名方案的一部分。 在引用名稱的tab擴展中,git可能會決定一個數字是sha-1的一部分,而不是分支名稱。 例如,我的問題跟踪器用十進制數字命名錯誤。 為了避免混淆,我將相關分支命名為CRnnnnn,而不僅僅是nnnnn。

$ git checkout CR15032<TAB>
Menu:   fix/CR15032    test/CR15032

如果我試圖擴展15032,git將不確定我是否想要搜索SHA-1或分支名稱,並且我的選擇會有所限制。

避免使用長的描述性名稱

當您查看分行列表時,長分行名稱可能非常有用。 但是當查看裝飾的單行日誌時,它可能會妨礙您,因為分支名稱可能會佔用大部分單行並縮短日誌的可見部分。

另一方面,如果你不習慣性地用手重寫它們,長分支名稱在“合併提交”中可能會更有幫助。 默認合併提交消息是Merge branch 'branch-name' 。 您可能會發現將合併消息顯示為Merge branch 'fix/CR15032/crash-when-unformatted-disk-inserted'而不是Merge branch 'fix/CR15032'


我的個人偏好是在完成主題分支後刪除分支名稱。

我沒有試圖用分支名稱來解釋分支的含義,而是使用“Branch:”在該分支的第一次提交中啟動提交消息的主題行,並在消息正文中包含進一步的解釋,如果主題沒有給我足夠的空間。

我使用的分支名稱純粹是在處理它時引用主題分支的句柄。 一旦主題分支的工作結束,我就擺脫了分支名稱,有時會標記提交以供日後參考。

這使得git branch的輸出也更加有用:它只列出長期分支和活動主題分支,而不是所有分支。


重命名分支:

git branch -m old_branchname new_branchname

這裡-m選項的長名稱是--move。 所以我們也可以使用

git branch --move old_branchname new_branchname

如果要重命名當前分支,請使用此分支。

git branch -m new_branchname

要么

git branch -move new_branchname

如果要將這些更改移動到遠程,請使用以下命令。

git push origin :old_branchname new_branchname

這將刪除old_branchname遠程分支並推送new_branchname本地分支。

git push origin -u new_branchname

這將重置new_branchname本地分支的上游分支。





git naming-conventions branch