如何使"git branch"尊重Linux上的"core.ignorecase"标志?

fra*_*mon 10 linux windows git case-sensitive

我们正在办公室的Linux服务器上使用远程Git存储库.所有客户端都是安装了Git Extensions作为客户端的Windows PC(使用msysgit运行).

在客户端系统上,如果我尝试执行以下操作:

git branch Branch1
git branch branch1
Run Code Online (Sandbox Code Playgroud)

第二个命令将失败,告诉我已经存在具有该名称的分支.这就是我所期待的,因为我将其设置core.ignorecase为真git config.

但是,如果我直接登录Linux系统并运行相同的命令,即使core.ignorecase标志设置为true ,也会创建两个分支.

我原本期望第二个命令也会失败,因为我将存储库配置为忽略大小写,但是标志在Linux系统上什么都不做,或者我错过了什么.

任何人都可以帮助我理解这个问题,因为我们计划很快将我们的SCM从Source Safe迁移到Git,这个问题让我们感到害怕.如果两个开发人员创建具有相同名称但不同情况的分支,并将结果推送到Linux存储库,会发生什么?

man*_*lds 18

我想在@ meagar的答案中添加更多细节:

FAT32/NTFS是保留大小写的文件系统.也就是说,如果你将文件命名为"Foo.txt",它将被存储为""Foo.txt".如果你将文件保存为"foo.txt",它将被保存为"foo.txt".但是由于它不区分大小写,"Foo.txt"和"foo.txt"实际上是相同的,并且您不能在同一目录中同时拥有这两个文件.

在Windows的存储库中,如果将名称从"Foo.txt"更改为"foo.txt",并且如果您不将git显示为更改,则可以将core.ignorecase配置设置为true,git将不会将其视为变化.如果你把它设置为假它会.(但由于文件系统和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分支.意识到这core.ignorecase与存储库中的文件 - 您的代码库 - 有关,并且对git的元数据文件没有影响.

所以你必须忍受并适应这样一个事实:在Linux中,你可以创建具有相同名称的分支,大小写不同,但在Windows中,你不能.


mea*_*gar 8

如何使"git branch"尊重Linux上的"core.ignorecase"标志?

你不能,因为国旗没有你认为它做的.

core.ignorecase

如果为true,则此选项启用各种变通方法,以使git能够更好地处理不区分大小写的文件系统,如FAT.

core.ignorecase与您描述的行为无关,它与分支名称的区分大小写无关.Git无法区分Windows Branch1branch1Windows 之间的区别与是否core.ignorecase设置无关,无论如何都会以相同的方式运行.

...但是在Linux系统上标志什么都不做,或者我错过了什么.

你没有错过任何东西.该标志在Linux系统上没有任何作用.core.ignorecase不是为了让操作系统不区分大小写,而是为了让Git能够处理破坏的不区分大小写的操作系统.Linux从根本上区分大小写,Git也是如此.您应该尝试使用它,并强制您的开发人员使用小写作为其分支名称.你应该试图让Git模仿来自其他操作系统的破坏行为.

如果两个开发人员创建具有相同名称但不同情况的分支,并将结果推送到Linux存储库,会发生什么?

然后你会有两个完全不同的分支,一个是小写的,另一个是错误的命名,有人会被迫合并并丢弃他们错误的分支.这是你常常会做的事情,作为使用Git的副作用.