在客户端系统上,如果我尝试执行以下操作:
git branch Branch1 git branch branch1
第二个命令将失败,告诉我一个具有该名称的分支已经存在.这是我期望的,因为我将core.ignorecase设置为true,在git config中.
但是,如果我直接登录到Linux系统并运行相同的命令,即使将core.ignorecase标志设置为true,也会创建两个分支.
我会期望第二个命令失败,因为我配置了存储库以忽略这种情况,但是标志在Linux系统上什么都不做,或者我错过了一些.
任何人都可以帮助我了解这个问题,因为我们计划将我们的SCM从Source Safe迁移到Git,这个问题令我们感到害怕.如果两个开发人员创建同名的分支,但是不同的情况,并将结果推送到Linux资源库会发生什么情况?
FAT32 / NTFS是case-preserving文件系统.也就是说,如果你命名一个文件“Foo.txt”,它将被存储为“Foo.txt”,如果你将文件保存为“foo.txt”,它将被保存为“foo.txt”由于它是不区分大小写的,“Foo.txt”和“foo.txt”实际上是一样的,您不能同时存在这两个文件.
在Windows中的存储库中,如果将名称从“Foo.txt”更改为“foo.txt”,并且如果您不将其显示为更改,则可以将core.ignorecase配置设置为true,并且git不会看到这是一个变化.如果你把它设置为false,它会. (但是由于文件系统和git的性质,似乎添加了一个新文件foo.txt,在Windows上增加了混乱).
这就是core.ignorecase的目的
来到分公司.分支只是指向提交的指针.这些指针只是文件.这些文件存储在.git / refs / heads中.当创建一个分支,比如说吧,创建一个名为.git / refs / head / bar的文件.现在,在Linux中,当您创建一个名为Bar的分支时,可以继续创建一个文件.git / refs / head / Bar,从而允许分支创建.但是在Windows上,您无法创建.git / refs / head / bar,因此当bar存在时,您将无法创建Bar分支.意识到core.ignorecase与您的存储库中的文件 – 代码库相关,并且不影响git的元数据文件.
所以你必须生活在这样一个事实上,你可以创建名称相同的分支,但是在Windows中,你不能.