我们被迫在工作中使用Windows,我可以说问题,奇怪的情况。我们有github存储库,我们在其中有一个名为Something
的目录(首字母大写' S'),但在我的本地,我看到这个名为something
的目录(注意)小写'),git status显示工作目录是干净的,即使我在本地更改此目录,例如SoMeThInG
git说没有任何改变。我怀疑Windows是一个问题,因为它不区分大小写。是否有可能从Windows级别更改此目录名称?或者也许如何强制git bash区分大小写?
更新
我已经从我的虚拟Fedora中更改了这些文件,但这只是一种解决方法,问题仍然没有答案,如何在Windows上正确执行?
答案 0 :(得分:2)
在不区分大小写的文件系统上,Git不会仅检测外壳中的更改。但是,在提交文件时,实际的外壳仍然会以添加到索引的方式反映出来。
因此,git add foo
和git add FOO
都适用于任何类型的套管中名为foo
的文件(例如FoO
或fOo
),但是每个命令实际上都会将该确切名称存入存储库。因此,git add foo
会使名称区分大小写 foo
,而git add FOO
会使名称区分大小写 {{1} }。
这就是为什么您应该尝试始终使用命令行自动完成文件名,因此您不会意外添加具有与实际不同的外壳的文件。或者使用自动暂存文件的命令,例如FOO
,因为那也会使用实际的套管。
但是,由于Git不会检测到外壳更改,因此一旦添加了特定外壳的文件,将使用该外壳,直到显式更改它为止。这就是为什么文件系统git add .
和foo/bar
中的文件可能在文件系统的物理上位于同一位置,但是使用Git内部的不兼容路径表示。所以你在这里要小心。
总而言之,你可以稍后修理外壳。但要做到这一点,你需要使用Git而不是文件系统进行更改,因为Git区分大小写而文件系统不是。所以像FOO/baz
这样的命令会起作用。与git mv
和git rm --cached
的组合相同。
例如,要修复git add
/ foo
目录的上述情况,可以做(假设文件夹的正确名称应为FOO
):
Foo
您还可以通过从索引中删除所有内容,然后将其添加回来修复每个文件的大小写:
git mv foo/bar Foo/bar
# or
git rm --cached FOO/baz
git add Foo/baz
这应该将所有重命名都放到正确的文件框中。