2017-03-29 86 views
2

所以我注意到,因为git根据文件系统中的分支名称命名文件夹(在refs文件夹中,特别是遥控器),这可能会导致问题,因为文件夹名称中允许的字符取决于操作系统。Git分支名称取决于操作系统?

例如,您可以在Mac OS创建一个分支,如:

feature/my_special_"Splash Screen"_feature 

如果我取这个在Windows上,它会失败,这样的消息:

Fetch failed: fatal: Unable to create 'C:/AndroidStudioProjects/MyProject/.git/refs/remotes/origin/feature/my_special_"Splash Screen"_feature.lock': Invalid argument 

由于文件名中包含这是在Windows上不允许的,而在MAC OS上允许的。

当你尝试在windows上创建相同的分支时,git将简单地移除aposthropes。

有没有人知道这方面的官方文档?另外,我们是否需要重新命名这个分支或者是否有解决方法?

+0

或者只是采用该分支的名称可能只包含字母数字+“/”的方针和你所有的设置。您甚至可以使用自动检查来防止人们将违反此政策的分支推送到中央存储库。 – larsks

+0

另一个问题是案例折叠。 Git中正在进行的工作是停止使用基于文件系统的文件来存储这些内容,事实上,分支名称通常存储在平面文件'.git/packed-refs'中,其中既不区分大小写也不限制OS限制在文件名上是一个问题。尽管如此,@larsks说。 :-)如果您开始使用Unicode文件名(考虑将代码与预先组合在一起),则工作树内的文件名具有相同的问题,只会更糟。 (另外'''不是一个撇号,它是一个双引号。) – torek

回答

3

一个非官方政策是 “Legal Git branch names” 中提到,引用this thread

一次Git分支名称不能 “”

  • 有开头的路径组件
  • 拥有双点 “..”
  • 有一个ASCII控制字符, “〜”, “^”, “:” 或SP,随时随地
  • 最终以 “/”
  • 结束与“ .lock”
  • 包含一个 “\”(反斜线)

That patch (for a better error message on invalid branch name) was not implemented,它不包括当时的双引号。

但是,在分支名称中避免任何特殊字符是一个好主意。

This comment in refs.c最为接近的官方政策:

/* 
* Try to read one refname component from the front of refname. 
* Return the length of the component found, or -1 if the component is 
* not legal. It is legal if it is something reasonable to have under 
* ".git/refs/"; We do not like it if: 
* 
* - any path component of it begins with ".", or 
* - it has double dots "..", or 
* - it has ASCII control characters, or 
* - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or 
* - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or 
* - it ends with a "/", or 
* - it ends with ".lock", or 
* - it contains a "@{" portion 
*/ 
+0

谢谢,很高兴有这个基础我们自己的政策。 – breakline