为什么分支名称不能包含“空格”字符?

我试过了:

git branch "MyProj/bin/ ignored" 

并收到:

 fatal: 'MyProj/bin/ ignored' is not a valid branch name. 

git-branch man page指向git-check-ref-format手册页来获取有效分支名称的实际规则。

果然,上述致命错误的原因似乎是包含一个空格字符。

任何想法,为什么在这个时代,空间仍然被排除在一个分支的名称(我会期望它在古代的CVS,例如,但Git?)

什么可能是有效的技术原因呢?

我不知道你是否会find一个纯粹的技术原因。 不过,我可以提供的空间往往会抛出各种* nix公用事业和文件名处理扳手,所以它可能是避免意外做任何错误进一步下线。 毕竟,一个git分支归结为repo中的文件,这避免了处理该文件名称中的空格(具体来说,分支是在.git / refs / heads /中的文件,如注释中所述)。

大多数情况下,我会猜测原因是哲学的,并且意在保持简单。 分支名称是人类可读的名称,没有真正的理由是复杂的(并且每次哈哈要求input两个额外的字符来调用系统pipe理员的鬼魂,将每个命令的别名混淆成难以辨认的三字母组合)。 否则称为“为什么cd不是chdir”的说法。

如果你足够的沮丧,有一个可能的解决方法。 unicode集中有很多类似空间的字符。 但只有U + 0020是不允许的空间。 采取例如一个不间断的空间,你可以有一个空格的分支名称。 主要的问题是你的键盘可能没有代码点的关键。 我使用以下脚本来解决该问题:

 #!/bin/zsh git co -b "${@// / }" 

它只是用不间断空格replace参数中的所有空格…

老线索,但嘿..
在Mac上我使用alt +空格。 它会添加一个无形的angular色,将为你做的伎俩。 介意:这不是一个“空间”,它是一个看不见的angular色。 在视觉上是相同的东西,但实际上是不一样的。 100%可能会混淆任何人的地狱,肯定会带来混乱无处不在,但嘿,为踢…为什么不呢? 的xD

git checkout -b US24024 Automated Tests - Profile A Switched to a new branch 'US24024 Automated Tests - Profile A'

这是不允许的,因为这会使“git checkout”命令的function复杂化。

例如:考虑你现在有一个分支叫,虽然你现在在主人。 如果你要运行命令

(主):git checkout -b我的修复

git不知道是否要创build一个名为“我的修复程序”的新分支,或者是否要创build一个名为“my”的新分支,该分支链接到您的原始“修复”,而不是“主”分支。

资料来源: https : //git-scm.com/docs/git-checkout (Git文档)