分支名称中哪些字符是非法的?
refname命名规则:
Git对引用的命名规则如下: 它们可以包含斜杠/用于分层(目录)分组,但没有斜杠分隔的组件可以以点.开始或以序列.lock结束。 它们必须至少包含一个/。这将强制存在诸如heads/, tags/等类别,但实际名称不受限制。如果使用了--allow-onelevel选项,则该规则将被放弃。 它们不能在任意位置有两个连续的点..。 它们不能包含ASCII控制字符(即值低于\040或\177 DEL的字节)、空格、波浪号~、插入号^或冒号:。 它们不能在任何位置有问号?、星号*或开括号[。请参阅下面的--refspec-pattern选项以获得该规则的例外。 它们不能以斜杠/开始或结束,也不能包含多个连续的斜杠(参见下面的--normalize选项查看此规则的例外) 不能以点.结尾 不能包含序列@{。 它们不能是单个字符@。 它们不能包含\。
Git对引用的命名规则如下:
/
.
.lock
它们必须至少包含一个/。这将强制存在诸如heads/, tags/等类别,但实际名称不受限制。如果使用了--allow-onelevel选项,则该规则将被放弃。
heads/
tags/
--allow-onelevel
..
它们不能包含ASCII控制字符(即值低于\040或\177 DEL的字节)、空格、波浪号~、插入号^或冒号:。
\040
\177
DEL
~
^
:
它们不能在任何位置有问号?、星号*或开括号[。请参阅下面的--refspec-pattern选项以获得该规则的例外。
?
*
[
--refspec-pattern
它们不能以斜杠/开始或结束,也不能包含多个连续的斜杠(参见下面的--normalize选项查看此规则的例外)
--normalize
不能以点.结尾
不能包含序列@{。
@{
它们不能是单个字符@。
@
它们不能包含\。
\
在此之上,分支名称的附加规则:
它们不能以破折号-开头
-
多亏了Jakub Narębski, git check-ref-format的手册页有了更多的细节。
git check-ref-format
另外,如果你考虑使用美元符号$字符,必须小心。
$
git branch pew$ign将创建pew。
git branch pew$ign
pew
为了创建一个包含$的分支,整个名称应该包装在报价中,使其成为字符串字面量:git branch 'pew$ign'。理想情况下,你应该避免使用任何符号。
git branch 'pew$ign'
接受的答案和手册页已经解释了哪些规则适用于Git分支名称。
refnames
/* * How to handle various characters in refnames: * 0: An acceptable character for refs * 1: End-of-component * 2: ., look for a preceding . to reject .. in refs * 3: {, look for a preceding @ to reject @{ in refs * 4: A bad character: ASCII control characters, and * ":", "?", "[", "\", "^", "~", SP, or TAB * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set */ static unsigned char refname_disposition[256] = { 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4 };
4
: ? [ \ ^ ~
3.更多字符需要满足一些条件(参见医生的评论):
{
REFNAME_REFSPEC_PATTERN
null字节终止分支名称,/为分支创建一个新的目录层次结构。 因此,分支名称不能以斜杠结尾。 例如,git checkout -b 'a/b/c'将在.git/refs/heads
git checkout -b 'a/b/c'
.git/refs/heads
注意,UTF-8字符可以用于分支名称:
UTF-8
$ git checkout -b $'\xCE\xA9' Switched to a new branch 'Ω'
它不喜欢>或= =比;或→
要完成主要答案由Manoj Govindan:
git version 2.24.3 (Apple Git-128)
HEAD