'git rev-parse --is-inside-work-tree' 无法识别工作树或子目录

'git rev-parse --is-inside-work-tree' doesn't recognize working tree or subdirectories

更新到最新的 Windows Git(从 1.6.2 到 2.5.0)后,我发现我无法对分支进行变基:

C:\core\guidewire\Dev.4>git checkout fhcf-assumptiondate && git rebase master
Previous HEAD position was d032e17... Merge branch 'de8041'
Switched to branch 'fhcf-assumptiondate'
First, rewinding head to replay your work on top of it...
fatal: C:\Program Files\Git\mingw64/libexec/git-core\git-am cannot be used without a working tree.

this question 上的评论提示 Git 安装冲突,但旧版本现在已完全删除,包括挥之不去的 DLL 和检查陈旧的环境变量。

查看 git 脚本,我发现错误消息来自 git-sh-setup 中使用 git rev-parse --is-inside-work-tree 的测试。直接查询rev-parse,好像没看懂我真的在工作副本里面:

C:\core\guidewire\Dev.4>dir .git
 Volume in drive C is System (Local)
 Volume Serial Number is D4EC-4ED4

 Directory of C:\core\guidewire\Dev.4

08/04/2015  21:16                27 .git
               1 File(s)             27 bytes
               0 Dir(s)  155,451,965,440 bytes free

C:\core\guidewire\Dev.4>git rev-parse --is-inside-work-tree
false

...除了一些命令 能够正确区分:

C:\core\guidewire\Dev.4>git status
HEAD detached from refs/heads/fhcf-assumptiondate
nothing to commit, working directory clean

C:\core\guidewire\Dev.4>cd ..

C:\core\guidewire\Dev>git status
fatal: Not a git repository (or any of the parent directories): .git

是什么让 Git 对我是否在正确的目录中感到困惑?

可能的兴趣点:

要在升级到 Windows Git 2.5 后继续使用现有的(1.6.x 创建的)存储库,请更新存储库的 gitconfig:

[core]
    worktree = c:/core/guidewire/Dev/2.4

[core]
    worktree = C:/core/guidewire/Dev/2.4

新的 Git 安装获取的路径与旧的不同,或者不再对路径区分大小写。因此,现有的 repo 工作树位置变得错误,因为 c:\core\guidewire\Dev.4 下的任何文件夹都不会有 C:\core\guidewire\Dev.4 的前缀。 Git source for the current version 没有显示不区分大小写的迹象,因此 msys 分支可能已经修改了路径检查功能,或者在比较之前对所有路径进行了大小写处理。