这是我使用的一些分支命名约定及其原因
分支命名约定
- 在分支名称的开头使用分组标记(单词)。
- 定义和使用短前导令牌以对您的工作流程有意义的方式区分分支。
- 使用斜杠分隔分支名称的各个部分。
- 请勿将裸数字用作开头部分。
- 避免为长期存在的分支使用长的描述性名称。
组令牌
在分支名称前使用“分组”标记。
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”的分支。这可能会使新用户感到困惑。
不要使用裸数字
不要在分支命名方案中使用裸数字(或十六进制数字)。在参考名称的制表符扩展内,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'
。