Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 - Fatal编程技术网

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

在Git分支名称中使用斜杠字符,git,branch,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

我很确定我在一个流行的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中创建带有斜杠字符的分支?

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

可能有层次化的分支名称(带有斜杠的分支名称)。例如,在我的存储库中,我有这样的分支。需要注意的是,存储库中不能同时包含分支“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 $git分行foo/bar 错误:无法解析引用引用/heads/labs/feature:不是目录 致命:无法锁定更新的引用:不是目录
上面的错误消息讨论的是“实验室/功能”分支,而不是“foo/bar”(除非复制粘贴中出现错误,即您编辑了部分会话)。
git branch
git rev parse——符号全名头的结果是什么?

您确定branch
labs
不存在(如中所示)

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

您试图让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下的目录层次结构


如果已经有一个具有基名称的分支,则有时会出现此问题

我试过这个:

git checkout -b features/aName origin/features/aName
不幸的是,我已经有了一个名为
features
的分支,我得到了一个问题询问者的例外


删除分支
功能
解决了问题,上面的命令起作用。

我忘了我已经有一个未使用的
实验室
分支。删除它解决了我的问题:

git branch -d labs
git checkout -b labs/feature
说明:

每个名称只能是父分支普通分支,不能同时是两者。这就是为什么分支
labs
不能同时存在的原因


原因是:分支存储在文件系统中,在那里您也不能有文件
labs
和目录
labs
处于同一级别。

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

在我的例子中,回购协议以前有“foo”分支,但现在没有了,我尝试从远程创建并签出“foo/bar”。 正如我所说,“foo”已经不存在了,但这个问题依然存在


最后,分支“foo”仍然在.git/config文件中,删除后一切正常:)

实际上,您的
头似乎有问题。看起来git认为你的
是指向尚未创建的分支
实验室/功能
的链接。我不知道这是怎么发生的,但这意味着你试图基于它创建一个名为
foo/bar
的分支,但它不起作用。你知道你的
头是怎么掉下来的吗?我很抱歉搞混了,它是“实验室/功能”,不是“foo/bar”,编辑的example.FWIW斜杠之前的任何内容都将在
.git/refs/heads
下生成一个目录,即如果执行
git checkout-b feature/123
操作,则在
projectRootFolder/.git/refs/heads
目录中,您将看到名为
feature
的目录,在该目录中,您将看到名为
123
。稍后,如果您创建另一个
feature/124
,那么在
feature
目录中,您将看到一个名为
124
的分支,创建名称中带有“/”的本地分支是完全可能的,而且确实很常见。这是在“名称空间”中对相关分支进行分组的一种常见方法。是的,老实说,在学习时可能会混淆,但命名也很有用。然后再次使用斜杠或破折号,我不确定这是否超出个人喜好?git flow使用这种名称空间:)感谢您的深入回复。。有趣的是,我尝试了git branch foo/bar(有效);然后git branch-dfoo/bar,但是我看到foo/目录(现在为空)仍然存在!编辑:我一做“git branch foo”它就被替换了。一切都很好。@faB:邪恶。。。但并非意外:您删除了bar(在'
foo
'名称空间中),但没有删除
foo
(可以作为其他分支的名称空间,也可以作为分支本身)。这并不重要,但git即使在调用
pack refs
时也不会改变其立场,因此,它会特意保护您不受此影响。总结一下答案:您可以在分支名称中使用斜杠。OP已经有了一个
labs
分支,并试图创建
labs/feature
,git对此犹豫不决。谢谢,很抱歉造成混淆,我首先编写了一个foo/bar示例,但粘贴了实际测试中的错误消息。不会再这样做了:)我也为我的错误感到抱歉,事实上我已经有了一个“实验室”分支。这正是我想要的!谢谢
git branch -d labs
git checkout -b labs/feature