我很确定我在一个流行的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中创建带有斜杠字符的分支?
你确定分支实验室不存在吗(就像在这个线程中一样)?
不能同时拥有同名的文件和目录。
你想让git做的基本上是这样的:
% CD .git/refs/heads
% ls -l
总0
-rw-rw-r——1 jhe jhe 41 2009-11-14 23:51实验室
-rw-rw-r——1 jhe jhe 41 2009-11-14 23:51 master
% mkdir实验室
mkdir:不能创建目录“实验室”:文件存在
您将得到与“不能创建目录”错误相同的结果。
当你有一个带有斜杠的分支时,它会被存储为
.git/refs/heads下的目录层次结构。
注意,实验室不能是现有的分支,正如ddruganov在评论中指出的那样:
git switch -c 19023-commerce/19033-commerce-view 19023-commerce
# Fails with:
fatal: cannot lock ref 'refs/heads/19073-commerce-view/99999-test-branch':
'refs/heads/19073-commerce-view' exists;
cannot create 'refs/heads/19073-commerce-view/99999-test-branch'
正如在“git push: refs/heads/my/subbranch exists, cannot create”中解释的那样:
如果分支b存在,则不能创建名为b/anything的分支。
同样,如果分支dev/b存在,则不能创建dev/b/c。
这是git的内部限制。