Git on Windows大写文件名在本地,小写本地

时间:2017-12-15 11:40:02

标签: windows git

我们被迫在工作中使用Windows,我可以说问题,奇怪的情况。我们有github存储库,我们在其中有一个名为Something的目录(首字母大写' S'),但在我的本地,我看到这个名为something的目录(注意)小写'),git status显示工作目录是干净的,即使我在本地更改此目录,例如SoMeThInG git说没有任何改变。我怀疑Windows是一个问题,因为它不区分大小写。是否有可能从Windows级别更改此目录名称?或者也许如何强制git bash区分大小写?

更新

我已经从我的虚拟Fedora中更改了这些文件,但这只是一种解决方法,问题仍然没有答案,如何在Windows上正确执行?

1 个答案:

答案 0 :(得分:2)

在不区分大小写的文件系统上,Git不会仅检测外壳中的更改。但是,在提交文件时,实际的外壳仍然会以添加到索引的方式反映出来。

因此,git add foogit add FOO都适用于任何类型的套管中名为foo的文件(例如FoOfOo),但是每个命令实际上都会将该确切名称存入存储库。因此,git add foo会使名称​​区分大小写 foo,而git add FOO会使名称​​区分大小写 {{1} }。

这就是为什么您应该尝试始终使用命令行自动完成文件名,因此您不会意外添加具有与实际不同的外壳的文件。或者使用自动暂存文件的命令,例如FOO,因为那也会使用实际的套管。

但是,由于Git不会检测到外壳更改,因此一旦添加了特定外壳的文件,将使用该外壳,直到显式更改它为止。这就是为什么文件系统git add .foo/bar中的文件可能在文件系统的物理上位于同一位置,但是使用Git内部的不兼容路径表示。所以你在这里要小心。

总而言之,你可以稍后修理外壳。但要做到这一点,你需要使用Git而不是文件系统进行更改,因为Git区分大小写而文件系统不是。所以像FOO/baz这样的命令会起作用。与git mvgit rm --cached的组合相同。

例如,要修复git add / foo目录的上述情况,可以做(假设文件夹的正确名称应为FOO):

Foo

您还可以通过从索引中删除所有内容,然后将其添加回来修复每个文件的大小写:

git mv foo/bar Foo/bar

# or
git rm --cached FOO/baz
git add Foo/baz

这应该将所有重命名都放到正确的文件框中。