在Windows上,git无法正确处理具有相同名称但在不同情况下的文件

时间:2015-06-09 15:59:22

标签: windows git

我在Windows上使用git。在我的项目中我更改了文件名的大小写。在之前提交的检出失败后(命令在Git Bash中):

mkdir repofolder
cd repofolder
git init # create empty repo
git config core.ignorecase false # turn on case-dependent filenames

# create 'readme.txt'
$ echo "blahblahblah" > readme.txt
$ git add readme.txt
$ git commit -m "+readme.txt"

# rename it to 'README.txt'
$ git mv -f readme.txt README.txt
$ git commit -m "readme.txt => README.txt"

$ git status
On branch master
nothing to commit, working directory clean

$ git checkout HEAD~1
error: The following untracked working tree files would be overwritten by     checkout:
        readme.txt
Please move or remove them before you can switch branches.
Aborting

为什么git不允许签出previos提交?

当您删除一个文件并添加另一个具有相同名称但具有不同大小写的文件时,您面临同样的问题。无论你做多少次提交:一次(删除并附加在同一次提交中)或两次提交(在第一次提交中删除文件,在第二次添加另一次提交)。

1 个答案:

答案 0 :(得分:0)

  

在Windows上,git无法处理具有相同名称但在不同情况下正确的文件

Windows上的Git无法处理它因为Windows itself can't handle it(强调我的):

  

作为POSIX合规性要求的一部分,Windows NT文件系统(NTFS)提供了区分大小写的文件和目录命名约定。 尽管NTFS和POSIX子系统都能很好地处理区分大小写,但基于Windows的16位,基于MS-DOS,基于OS / 2和基于Win32的应用程序却没有。

事实上,Windows确实对NTFS区分大小写有一定程度的支持,但它非常不稳定:

  

但是,如果您尝试在Win32应用程序(如记事本)中打开其中一个文件,则只能访问其中一个文件,无论您在“打开文件”对话框中键入的文件名是什么情况。

     

还存在其他不一致之处。 Windows NT命令提示符和文件管理器正确显示文件的名称。但是,当您尝试访问仅在大小写不同的一个或多个文件名时,正常命令(例如COPY)会失败。