Git 分支名称中的哪些字符是非法的?
分支名称中的哪些字符是非法的?refname的命名规则: Git对引用的命名方式实施了以下规则:Git 分支名称中的哪些字符是非法的?,git,branch,naming,Git,Branch,Naming,分支名称中的哪些字符是非法的?refname的命名规则: Git对引用的命名方式实施了以下规则: 它们可以包括用于分层(目录)分组的斜杠/,但斜杠分隔的组件不能以点开头或以序列.lock结尾 它们必须至少包含一个/。这将强制存在一个类别,如heads/、tags/等,但实际名称不受限制。如果使用了--allow onelevel选项,则放弃此规则 它们不能有两个连续的点。。 它们不能有ASCII控制字符(即值小于\040或\177DEL)的字节、空格、波浪号~、插入符号^或冒号: 它们不
/
,但斜杠分隔的组件不能以点
开头或以序列.lock
结尾
/
。这将强制存在一个类别,如heads/
、tags/
等,但实际名称不受限制。如果使用了--allow onelevel
选项,则放弃此规则
\040
或\177
DEL
)的字节、空格、波浪号~
、插入符号^
或冒号:
?
、星号*
或开括号[
。有关此规则的例外情况,请参阅下面的--refspec pattern
选项
/
,也不能包含多个连续的斜杠(有关此规则的例外情况,请参阅下面的--normalize
选项)
@{
@
\
-
谢谢,for <代码> Git ChestReF格式有更多的细节。
< P>作为添加,如果您考虑使用美元符号<代码> $< /代码>字符,则必须小心。git branch pew$ign
将创建pew。为了创建一个包含$
的分支,整个名称应该用引号括起来:git branch'pewSign'
。理想情况下,您应该避免使用任何符号。接受的答案以及已经解释了哪些规则适用于git分支名称
在Git源代码中,数组用于确定如何处理refnames
中的各种字符。
数组中的索引对应于ASCII字符,这些值指示如何处理ASCII字符
/*
*如何处理refnames中的各种字符:
*0:引用的可接受字符
*1:组件末尾
*2:,在参考文献中查找前面的.要拒绝
*3:{,在参考文献中查找要拒绝的@{前面的@
*4:错误字符:ASCII控制字符,和
*“:”、“?”、“[”、“\”、“^”、“~”、SP或制表符
*5:*,除非设置了REFNAME\u REFSPEC\u模式,否则拒绝
*/
静态无符号字符refname\u处置[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
意味着分支名称中不允许使用相应的ASCII字符,因此有39个不允许使用的字符。
不允许使用的字符是ASCII控制字符(ASCII代码<32)、可打印字符:?[\^ ~
和空白/制表符
还有3个字符需要满足某些条件(参见文档注释):
:禁止两个后续点
:禁止子字符串{
@{
:除非设置了*
,否则拒绝REFNAME\u REFSPEC\u PATTERN
git checkout-b'a/b/c'
将在下创建相应的目录结构。git/refs/heads
请注意,UTF-8
字符可用于分支名称:
$ git checkout -b $'\xCE\xA9'
Switched to a new branch 'Ω'
值得一提的是,“>”是允许的,但在bash中切换到该分支需要使用前面的“\”进行转义。我对您链接的手册页中的规则2感到困惑。它说“2.它们必须至少包含一个
/
”。请解释一下?我的分支名称中没有一个/
。@chharvey:a“分支”没有/
就有头/
自动添加到它前面。实际上:没有/
,还不清楚它是一个分支还是一个标记或其他东西……下面是这个/^[\./]\.\.[\/\.[\/\.]的正则表达式。{124\.[\/\.]$$\\\\\\[\\\\\\\\\.[\\\\.[\\\\\\.[\\\\\\\.[\\\\\\.[\\\\\\\\\\.[\\\\\\\\\\\\\\\\\\\\\\/g这将发现无效字符,因此您可以将其替换为“-”或任何您想要的字符。&
字符有时会导致Windows上的分支名称出现问题。根据线程,逗号也是非法的。