Man*_*dan 273
命名规则
Git对引用的命名方式规定了以下规则:
它们可以包括
/用于分层(目录)分组的斜杠,但是没有斜杠分隔的组件可以以点.或结束序列开头.lock.它们必须包含至少一个
/.这强制存在类似的类别等heads/,tags/但实际名称不受限制.如果使用该--allow-onelevel选项,则放弃此规则.他们不能在
..任何地方连续两个点.它们不能具有ASCII控制字符(即值小于
\040或等于的字节\177DEL),空格,波浪号~,插入符号^或冒号:.它们不能在任何地方都有问号
?,星号*或开括号[.有关--refspec-pattern此规则的例外情况,请参阅下面的选项.它们不能以斜杠开头或结尾,也不能
/包含多个连续斜杠(有关--normalize此规则的例外情况,请参阅下面的选项)它们不能以点结尾
..它们不能包含序列
@{.他们不能是单一的角色
@.他们不能包含
\.
感谢的JakubNarębski,该手册页的-细节更加丰富.
upe*_*upe 12
接受的答案和手册页已经解释了哪些规则适用于 Git 分支名称。
\n在 Git 源代码中,refname_disposition数组用于确定如何处理 中的各种字符refnames。\n数组中的索引对应于ASCII 码,值表示如何处理 ASCII 字符。
/*\n * How to handle various characters in refnames:\n * 0: An acceptable character for refs\n * 1: End-of-component\n * 2: ., look for a preceding . to reject .. in refs\n * 3: {, look for a preceding @ to reject @{ in refs\n * 4: A bad character: ASCII control characters, and\n * ":", "?", "[", "\\", "^", "~", SP, or TAB\n * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set\n */\nstatic unsigned char refname_disposition[256] = {\n 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4\n};\nRun Code Online (Sandbox Code Playgroud)\n由于4表示分支名称中不允许使用相应的 ASCII 字符,因此有39 个不允许的字符。\n不允许的字符是 ASCII 控制字符(ASCII 代码 < 32)、可打印字符: ? [ \\ ^ ~和空格/制表符。
另外3 个字符需要满足一些条件(请参阅文档注释):
\n.:禁止连续两个点。{: 子字符串@{被禁止。*:除非REFNAME_REFSPEC_PATTERN设置否则拒绝。空字节终止分支名称并/为分支创建新的目录层次结构。\n因此分支名称不能以斜杠结尾。\n例如git checkout -b \'a/b/c\'将在下创建相应的目录结构.git/refs/heads
请注意,UTF-8分支名称中可以使用字符:
$ git checkout -b $\'\\xCE\\xA9\'\nSwitched to a new branch \'\xce\xa9\'\nRun Code Online (Sandbox Code Playgroud)\n