关于分支和标签名称
大多数仓库使用简单的分支名称,例如 main 或 update-icons。标签名称通常也遵循基本格式,例如像 v1.2.3 这样的版本号。分支名称和标签名称都可以使用路径分隔符(/)来组织结构,例如 area/item 或 level-1/level-2/level-3。除了一些例外——比如名称不能以斜杠开头或结尾,且不能出现连续的斜杠——Git 对可以在分支和标签名称中使用的字符几乎没有限制。更多信息,请参阅 Git 文档中的 git-check-ref-format。
为何需要转义特殊字符
在使用命令行界面时,可能会遇到分支或标签名称中包含对当前 shell 环境有特殊意义的字符的情况。要在 Git 命令中安全地使用这些字符,必须对其加引号或进行转义,否则命令可能产生意外效果。
例如,$ 在许多 shell 中用于引用变量。大多数 shell 会把类似 hello-$USER 的有效分支名称解释为 “hello” 加连字符,再加上变量 USER 的当前值,而不是字面字符串 hello-$USER。如果分支名称中包含 $,就必须阻止 shell 将其当作变量引用进行展开。同理,如果分支名称中出现分号(;),大多数 shell 会把它当作命令分隔符,需要加引号或转义。
如何转义分支和标签名称中的特殊字符
大多数含有特殊字符的分支和标签名称可以通过将名称放在单引号中来处理,例如 'hello-$USER'。
- 在 Bash shell 中,用单引号括起字符序列会保留其中字符的字面值。
- Zsh 的行为与 Bash 类似,但可以通过
RC_QUOTES选项进行配置。 - PowerShell 在单引号内部也会把字符视为字面值。
对于这些 shell,唯一的例外是分支或标签名称本身包含单引号的情况。遇到这种情况时,请参考对应 shell 的官方文档。
为分支和标签命名
如果可能,请创建不包含特殊字符的分支和标签名称,因为这些名称需要进行转义。一个安全的默认字符集包括:
- 英文字母(
a到z和A到Z) - 数字(
0到9) - 一小部分标点字符
- 句点(
.) - 连字符(
-) - 下划线(
_) - 正斜杠(
/)
为避免混淆,分支名称应以字母开头。
GitHub 对名称的限制
GitHub 限制少数分支和标签名称不能被推送。其限制如下:
- 不允许使用看起来像 Git 对象 ID(仅由 0-9 和 A-F 组成的 40 个字符)的名称,以免与实际的 Git 对象 ID 混淆。
- 不允许以
refs/开头的名称,以免与 Git 引用的完整名称混淆。更多关于引用的信息,请参阅 Git 文档中的 Git References。