Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 分支名称中的哪些字符是非法的?_Git_Branch_Naming - Fatal编程技术网

Git 分支名称中的哪些字符是非法的?

Git 分支名称中的哪些字符是非法的?,git,branch,naming,Git,Branch,Naming,分支名称中的哪些字符是非法的?refname的命名规则: Git对引用的命名方式实施了以下规则: 它们可以包括用于分层(目录)分组的斜杠/,但斜杠分隔的组件不能以点开头或以序列.lock结尾 它们必须至少包含一个/。这将强制存在一个类别,如heads/、tags/等,但实际名称不受限制。如果使用了--allow onelevel选项,则放弃此规则 它们不能有两个连续的点。。 它们不能有ASCII控制字符(即值小于\040或\177DEL)的字节、空格、波浪号~、插入符号^或冒号: 它们不

分支名称中的哪些字符是非法的?

refname的命名规则:

Git对引用的命名方式实施了以下规则:

  • 它们可以包括用于分层(目录)分组的斜杠
    /
    ,但斜杠分隔的组件不能以点
    开头或以序列
    .lock
    结尾

  • 它们必须至少包含一个
    /
    。这将强制存在一个类别,如
    heads/
    tags/
    等,但实际名称不受限制。如果使用了
    --allow onelevel
    选项,则放弃此规则

  • 它们不能有两个连续的点。。

  • 它们不能有ASCII控制字符(即值小于
    \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上的分支名称出现问题。根据线程,逗号也是非法的。