在Git分支名称中使用斜杠字符

时间:2010-03-26 23:07:33

标签: git branch

我很确定我在一个流行的Git项目中看到某个分支有一个像“feature / xyz”这样的模式。

但是,当我尝试使用斜杠字符创建分支时,出现错误:

$ git branch labs/feature
error: unable to resolve reference refs/heads/labs/feature: Not a directory
fatal: Failed to lock ref for update: Not a directory

(我的初步尝试)同样的问题:

$ git checkout -b labs/feature

如何使用斜杠字符在Git中创建分支?

7 个答案:

答案 0 :(得分:199)

您确定分支labs尚不存在(如this thread中所述)吗?

  

您不能同时拥有文件和名称相同的目录。

     

你正试图让git基本上做到这一点:

% cd .git/refs/heads
% ls -l
total 0
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 labs
-rw-rw-r-- 1 jhe jhe 41 2009-11-14 23:51 master
% mkdir labs
mkdir: cannot create directory 'labs': File exists
     

您将获得相当于“无法创建目录”的错误   当你有一个带有斜杠的分支时,它会被存储为   .git/refs/heads下的目录层次结构。

答案 1 :(得分:94)

可以使用分层分支名称(带有斜杠的分支名称)。例如,在我的存储库中,我有这样的分支。需要注意的是,您不能在存储库中同时拥有分支'foo'和分支'foo / bar'。

您的问题不在于使用名称中的斜杠创建分支。

$ git branch foo/bar
error: unable to resolve reference refs/heads/labs/feature: Not a directory
fatal: Failed to lock ref for update: Not a directory

上面的错误消息是关于'labs / feature'分支,而不是'foo / bar'(除非它是copy'n'paste中的错误,即你编辑了部分会话)。 git branchgit rev-parse --symbolic-full-name HEAD的结果是什么?

答案 2 :(得分:27)

如果您已经拥有基本名称的分支,则有时会出现此问题。

我试过了:

git checkout -b features/aName origin/features/aName

不幸的是,我已经有了一个名为features的分支,我得到了提问者的例外。

删除分支features解决了问题,上面的命令有效。

答案 3 :(得分:23)

在我的情况下,我忘记了已经有一个未使用的labs分支。删除它解决了问题:

git branch -d labs
git checkout -b labs/feature

<强>解释

每个名称只能是父分支正常分支,而不是两者。这就是为什么分支labs labs/feature不能同时存在。

此行为的原因是分支存储在文件系统中,您也无法在同一级别拥有文件labs和目录labs

答案 4 :(得分:1)

分支名称区分大小写,因此如果您的发布经理在 Azure 中创建了文件夹,则文件夹名称应完全匹配。与经理一起培养它的方法很难学会。

答案 5 :(得分:0)

只是有相同的问题,但我再也找不到冲突的分支。

在我的情况下,存储库之前有“ foo”分支,但现在不行了,我尝试从远程创建和签出“ foo / bar”。 正如我所说的,“ foo”不再存在,但是问题仍然存在。

最后,分支“ foo”仍然位于.git / config文件中,删除后一切都还好:)

答案 6 :(得分:-2)

我可能错了,但我认为当与远程仓库相关时,斜杠只出现在分支名称中,例如origin/master