分行名称以git中的'-'开头

问题描述 投票:1回答:2

我正在使用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文章介绍了合法的分支机构名称,我认为我的分支机构名称为Legal。谁能告诉我问题出在哪里?

PS:成功导入不以'-'开头的分支名称。

git git-svn git-branch
2个回答
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不是有效的分支名称。因此,最好更改分支名称,以使它们不会以破折号开头。


0
投票
您引用的文章不正确(很可能是因为它已过时)。法律参考和分支名称的规则可以在man 1 git-check-ref-format中找到:

Git对引用的命名方式强加以下规则:

    对于层次结构(目录)分组,它们可以包括斜杠/,但是斜杠分隔的组件不能以点.开头或以序列.lock结束。
  1. 它们必须至少包含一个/。这将强制出现heads/tags/等类别,但实际名称不受限制。如果使用--allow-onelevel选项,则将免除此规则。

  2. 它们不能有两个连续的点.。任何地方。

  3. 它们不能在任何地方都具有ASCII控制字符(即,值小于\ 040或\ 177 DEL的字节),空格,代字号~,脱字符号^或冒号:

  4. 他们在任何地方都不能带有问号?,星号*或开括号[。有关此规则的例外,请参见下面的--refspec-pattern选项。

  5. 它们不能以斜杠/开头或结尾,也不能包含多个连续的斜杠(有关此规则的例外,请参见下面的--normalize选项)

  6. 它们不能以点号.结尾。

  7. 它们不能包含序列@{

  8. 它们不能为单个字符@

  9. 它们不能包含\

  • 请注意,这些是

    references的规则。

    branches有一套更严格的规则,它们似乎未在手册中列出,但其中提到:

    破折号可能会出现在ref组件的开头,但在分支名称的开头明确禁止使用
    这正是您的情况。换句话说,foo/bar/-test有效,而-test无效。

    最后,您可以通过创建其他名称的分支来<>作弊,然后转到.git/refs/heads并在其中重命名(使用mv)。然后,您将拥有此分支,可以在git branch中看到它(与分支不同,分支的名称对于

    reference

    是非法的,但您仍然无法检出它。) >
  • © www.soinside.com 2019 - 2024. All rights reserved.