我正在我的本地机器(OS-X 10.10)上进行测试,该机器使用不区分大小写的文件系统(HFS + [CI]) - 当我重置到头部时:
$ git reset head --hard
$ git reset HEAD --hard
Run Code Online (Sandbox Code Playgroud)
和
$ git checkout 4f2c
$ git checkout 4F2C
Run Code Online (Sandbox Code Playgroud)
有完全相同的结果.据我所知,GIT将refs存储在内部,./git/refs但底层文件系统的区分大小写会影响结果吗?
我会在区分大小写的文件系统上获得相同的结果吗?
是的,它们不区分大小写.不,区分大小写的文件系统无关紧要.因为gitref是SHA-1哈希的一部分,那些是十六进制数字(base-16,它们看起来像字母).至少对于commit-id.正如@EdwardThomson在评论中所指出的,引用名称可能(或可能不是)区分大小写(这取决于底层文件系统以及存储机制是否松散或打包).
不,您不会在区分大小写的文件系统上获得相同的结果.如果你跑了:
git reset branch --head
Run Code Online (Sandbox Code Playgroud)
在区分大小写的文件系统上然后与运行不同:
git reset BRANCH --hard
Run Code Online (Sandbox Code Playgroud)
由于引用通常存储在文件系统(在.git/refs/heads文件夹中)中,因此文件系统的区分大小写起作用.在区分大小写的文件系统,.git/refs/heads/branch并且.git/refs/heads/BRANCH是两个不同的文件.
请注意,即使在不区分大小写的文件系统上,您的引用也可能会在指定每行引用的文件中"打包".在这种情况下,无论文件系统如何,您的引用始终区分大小写.