我使用git-svn从svn转到git,我的一些分支名称以' - '开头。现在,通过帮助形式this问题和this迁移文档,我可以传递以“ - ”开头的参数。但在创建分支git时返回一个错误说明:
致命:' - CLOSED-mybranch'不是有效的分支名称。
我正在使用gitlab。我正在运行以创建分支的命令是:
git for-each-ref refs/remotes | cut -d / -f 3- | grep -v @ | while read branchname; do git branch -- "$branchname" --"refs/remotes/$branchname"; git branch -r -d -- "$branchname"; done
This文章解释了合法的分支机构名称,我认为我的分支机构名称是合法的。谁能告诉我问题可能在哪里?
PS:成功导入不以' - '开头的分支名称。
答案 0 :(得分:0)
您似乎无法创建一个名称以短划线开头的分支:
$ git branch "-test"
error: unknown switch `e'
显然我认为我尝试设置git branch
选项-t
,然后对以下e
提出错误。
它也不能使用此命令:
$ git checkout -b "-test"
fatal: '-test' is not a valid branch name.
在这种情况下,实际上它确实说-test
不是有效的分支名称。因此,如果您更改分支名称以便他们不会以破折号开头,那么这可能是最好的。
答案 1 :(得分:0)
对该问题的简短回答是:很遗憾,这不是合法的分支机构名称。
您引用的文章不正确(很可能是因为它已过时)。法律参考和分支机构名称的规则可以在man 1 git-check-ref-format
中找到:
Git对引用的命名方式施加以下规则:
对于层次结构(目录)分组,它们可以包括斜杠
/
,但是斜杠分隔的组件不能以点.
开头或以序列.lock
结尾。 / p>它们必须至少包含一个
/
。这样可以强制使用heads/
,tags/
等类别,但是实际名称不受限制。如果使用--allow-onelevel
选项,则该规则将被放弃。它们不能有两个连续的点
.
。任何地方。它们不能具有ASCII控制字符(即值小于\ 040或\ 177
DEL
的字节),空格,波浪号~
,插入符号^
或冒号:
在任何地方。他们在任何地方都不能带有问号
?
,星号*
或方括号[
。有关此规则的例外,请参见下面的--refspec-pattern
选项。它们不能以斜杠
/
开头或结尾,也不能包含多个连续的斜杠(有关此规则的例外,请参见下面的--normalize
选项)它们不能以点
.
结尾。它们不能包含序列
@{
。它们不能是单个字符
@
。它们不能包含
\
。
请注意,这些是引用的规则。 分支机构有一套更严格的规则,它们似乎没有在手册中列出,但其中提到:
破折号可能会出现在ref组件的开头,但明确禁止在分支名称的开头
这正是您的情况。换句话说,foo/bar/-test
有效,而-test
无效。
最后,您可以通过创建其他名称的分支来作弊,然后转到.git/refs/heads
并在其中重命名(使用mv
)。然后,您将拥有该分支,您将能够在git branch
中看到它(与分支不同,分支的名称对于 reference 是非法的),但是您仍然无法进行结帐。