下面是我使用的一些分支命名约定及其原因
分支命名约定
在分支名称的开头使用分组标记(单词)。
定义和使用短引线标记,以对您的工作流有意义的方式区分分支。
使用斜杠分隔分支名称的各个部分。
不要用数字作为开头部分。
避免为长生命周期的分支使用冗长的描述性名称。
集团的令牌
在分支名称前使用“分组”标记。
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扩展(命令补全)。我有它配置的方式,我可以通过输入部分的第一个字符并按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的一部分,而不是分支名称。例如,我的问题跟踪器用十进制数字命名bug。为了避免混淆,我将相关分支命名为CRnnnnn而不是nnnnn。
$ git checkout CR15032<TAB>
Menu: fix/CR15032 test/CR15032
如果我尝试只扩展15032,git将不确定我是想搜索SHA-1的名称还是分支名称,并且我的选择将受到一定的限制。
避免使用冗长的描述性名称
在查看分支列表时,较长的分支名称非常有用。但是,当查看经过修饰的单行日志时,分支名称可能会占用大部分单行,并缩短日志的可见部分。
另一方面,如果您不习惯手工重写,那么长分支名称在“合并提交”中会更有帮助。默认的合并提交消息是合并分支'branch-name'。你可能会发现,让合并消息显示为合并分支'fix/CR15032/crash-when- unformatting -disk-inserted'而不是合并分支'fix/CR15032'更有帮助。