为什么git大写我的分行名称前缀?
我有一个非常简单的git命令集,导致了一些奇怪的行为:
显示我目前的本地分支,看看我在release/beta1
:
$ git branch develop master * release/beta1
从release/beta1
创build一个bugfix/somefeature
分支:
$ git checkout -b bugfix/somefeature Switched to a new branch 'bugfix/somefeature'
到目前为止这么好,对吧? 那么,再次向我展示当地的分支:
$ git branch BUGFIX/somefeature
问题:
- 为什么我的分支的
bugfix
前缀被大写为BUGFIX
? - 相关,为什么没有用星号标记为我当前的分支?
我在OS X 10.8.2上通过Homebrew使用git 1.8.1.5版本,而且这种情况发生在或者没有我的驯服~/.gitconfig
的地方。 这似乎发生在每个bugfix/...
分支。
分支存储在.git
目录中的文件 。 单个分支是一个包含分支指向的提交对象的散列的单个文件。
所以,正如你猜测的那样,当创build一个分支foo/bar
这将对应一个带有文件的目录。 所以Git将创build一个文件夹foo
,然后指向提交。
这意味着当你添加另一个分支foo/baz
它会创build一个文件baz
并将其添加到文件夹中。
现在分支名称对不区分大小写的文件系统是不区分大小写的。 这意味着FOO/bar
和foo/bar
是一样的。 但实际的内部名称取自原始文件夹和文件名。 因此,当您的bugfix
分支类别的文件夹被写入大写,然后分支被识别为一个大写的bugfix
。
要解决这个问题,只需进入.git/refs/heads
并将文件夹名称更改为您喜欢的方式。