为什么分支名称不能包含'space'char?

Win*_*Win 58 git git-branch

我试过了:

git branch "MyProj/bin/ ignored"
Run Code Online (Sandbox Code Playgroud)

并收到:

fatal: 'MyProj/bin/ ignored' is not a valid branch name.
Run Code Online (Sandbox Code Playgroud)

混帐分支男子网页指向的git检查-REF-格式手册页,以获得实际的规则,一个有效的分支名称.

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

知道为什么,在这个时代,空间仍然被排除在分支名称之外(例如,我会在古老的CVS中预期它,但是Git?)

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

she*_*mer 60

我不知道你是否会在最底层找到一个纯粹的技术理由.但是,我可以提供空间倾向于在各种*nix实用程序和文件名处理中抛出扳手,因此可能是为了避免在进一步的行中意外地做错了.毕竟,git分支归结为repo中的文件,这避免了处理该文件名称中的空格(具体而言,分支是.git/refs/heads /中的文件,如注释中所述).

大多数情况下,我认为原因是哲学的,并且意味着保持简单.分支名称是人类可读的名称,没有真正的理由变得复杂(并且每次哈哈需要输入两个额外的字符,以调用将每个命令别名化为无法辨认的三个字母组合的系统管理员的幽灵).否则称为"为什么cd不是chdir"的说法.

  • 在引擎盖下,Git分支是`.git/refs/heads /`中的一个简单文件,只包含它所指向的提交的SHA-1.正如@Shelhamer所说,文件名中的空格在*nix中有些尴尬,所以Git只是回避了这一点. (13认同)

Vir*_*Vir 5

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

#!/bin/zsh
git co -b "${@// / }"
Run Code Online (Sandbox Code Playgroud)

它只是用不间断空格替换参数中的所有空格......


joe*_*joe 5

旧线程,但嘿..
在Mac上,我使用alt +空间。它会添加一个看不见的角色来帮你。注意:这不是一个“空间”,而是一个看不见的字符。在视觉上是同一件事,但实际上是不一样的。100%可能会混淆其他人的地狱,并且肯定会在各处带来混乱,但是,嘿,踢踢..为什么不呢?xD

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

  • 顺便说一句,有人指出,Atlasian源代码树在某些情况下无法读取以“ space”命名的分支。这很明显,但是使用后果自负(或惹恼您的同事)。 (2认同)
  • 出于好奇:alt + 空格 = Unicode 字符 'NO-BREAK SPACE' (U+00A0) (2认同)