'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 对我是否在正确的目录中感到困惑?
可能的兴趣点:
- Repo 是由之前的安装创建的。
- 1.6.2 是 Git 的 msys 版本。 2.5.0 是 MinGW。
- 使用
--separate-git-dir
克隆了存储库。
checkout
、status
、add
、commit
以及可能其他人在升级后都没有问题。
- 损坏的存储库的克隆表现出正确的行为;正确检测到工作树的 'in' 或 'out'。
要在升级到 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 分支可能已经修改了路径检查功能,或者在比较之前对所有路径进行了大小写处理。
更新到最新的 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 对我是否在正确的目录中感到困惑?
可能的兴趣点:
- Repo 是由之前的安装创建的。
- 1.6.2 是 Git 的 msys 版本。 2.5.0 是 MinGW。
- 使用
--separate-git-dir
克隆了存储库。 checkout
、status
、add
、commit
以及可能其他人在升级后都没有问题。- 损坏的存储库的克隆表现出正确的行为;正确检测到工作树的 'in' 或 'out'。
要在升级到 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 分支可能已经修改了路径检查功能,或者在比较之前对所有路径进行了大小写处理。