分支名称以git中的“ - ”开头

时间:2014-04-07 08:33:58

标签: git git-svn git-branch

我使用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:成功导入不以' - '开头的分支名称。

2 个答案:

答案 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对引用的命名方式施加以下规则:

     
      
  1. 对于层次结构(目录)分组,它们可以包括斜杠/,但是斜杠分隔的组件不能以点.开头或以序列.lock结尾。 / p>

  2.   
  3. 它们必须至少包含一个/。这样可以强制使用heads/tags/等类别,但是实际名称不受限制。如果使用--allow-onelevel选项,则该规则将被放弃。

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

  6.   
  7. 它们不能具有ASCII控制字符(即值小于\ 040或\ 177 DEL的字节),空格,波浪号~,插入符号^或冒号:在任何地方。

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

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

  12.   
  13. 它们不能以点.结尾。

  14.   
  15. 它们不能包含序列@{

  16.   
  17. 它们不能是单个字符@

  18.   
  19. 它们不能包含\

  20.   

请注意,这些是引用的规则。 分支机构有一套更严格的规则,它们似乎没有在手册中列出,但其中提到:

  

破折号可能会出现在ref组件的开头,但明确禁止在分支名称的开头

这正是您的情况。换句话说,foo/bar/-test有效,而-test无效。

最后,您可以通过创建其他名称的分支来作弊,然后转到.git/refs/heads并在其中重命名(使用mv)。然后,您将拥有该分支,您将能够在git branch中看到它(与分支不同,分支的名称对于 reference 是非法的),但是您仍然无法进行结帐。