我们正在使用位于办公室 Linux 服务器上的远程 Git 存储库。所有客户端都是 Windows PC,并安装了 Git 扩展作为客户端(使用 msysgit 运行)。
在客户端系统上,如果我尝试执行以下操作:
git branch Branch1
git branch branch1
第二个命令将会失败,告诉我具有该名称的分支已经存在。这就是我所期望的,因为我设置了core.ignorecase
为真git config
.
但是,如果我直接登录 Linux 系统并运行相同的命令,两个分支都会被创建,即使core.ignorecase
标志设置为 true。
我预计第二个命令也会失败,因为我将存储库配置为忽略大小写,但要么该标志在 Linux 系统上没有任何作用,要么我错过了一些东西。
任何人都可以帮助我理解这个问题,因为我们计划很快将 SCM 从 Source Safe 迁移到 Git,这个问题让我们感到害怕。如果两个开发人员创建名称相同但大小写不同的分支,并将结果推送到 Linux 存储库上,会发生什么情况?
我想在@meagar的回答中添加更多细节:
FAT32/NTFS 是保留大小写 http://en.wikipedia.org/wiki/Case_preservation文件系统。也就是说,如果您将文件命名为“Foo.txt”,它将被存储为“”Foo.txt”。如果您将文件另存为“foo.txt”,它将被保存为“foo.txt”。但是由于它不区分大小写,因此“Foo.txt”和“foo.txt”实际上是相同的,并且您不能将这两个文件放在同一目录中。
在 Windows 中的存储库中,如果将名称从“Foo.txt”更改为“foo.txt”,并且不通过 git 将其显示为更改,则可以设置core.ignorecase
配置为 true 并且 git 不会将其视为更改。如果你把它设置为 false 就会。 (但由于文件系统和 git 的性质,看起来像是添加了一个新文件 foo.txt,这在 Windows 上增加了混乱)。
这就是该项目的目的core.ignorecase
来到分行。分支只是指向提交的指针。这些指针只是文件。这些文件存储在.git/refs/heads
。当你创建一个分支时,比如说,bar
,一个名为.git/refs/head/bar
被建造。现在,在 Linux 中,当您创建一个名为Bar
,它可以继续创建一个文件.git/refs/head/Bar
因此允许创建分支。但在 Windows 上,您无法创建.git/refs/head/Bar
因此,当 bar 存在时,您将无法创建 Bar 分支。意识到core.ignorecase
与您的存储库(您的代码库)中的文件有关,并且对 git 的元数据文件没有影响。
因此,您必须接受并适应这样一个事实:在 Linux 中,您可以创建具有相同名称但大小写不同的分支,但在 Windows 中则不能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)