症状
我有一个奇怪的问题,我想 checkout 一个不同的分支 <branch2>
,但是当我尝试时,我得到的消息是
$ git checkout <branch2>
error: The following untracked working tree files would be overwritten by checkout:
<filename.xlsx>
Please move or remove them before you switch branches.
Aborting
但是git ls-files
列出 <filename.xlsx>
作为跟踪文件。
解决方法
如果我做 git checkout -f <branch2>
它有效,并且 <branch2>
excel 文件的版本存在且正确(类似地,如果我 rm <filename.xlsx>
然后 checkout 我得到正确的文件。)
回到<branch1>
我遇到了完全相同的问题(跟踪了 <filename.xlsx>
,但 checkout 时似乎未跟踪)。
测试/故障排除
进一步调查这似乎与 Windows/Linux 问题有关:
- 我主要在 Debian 的 VirtualBox VM 中工作,所以我在那里使用我的 git 工具和终端,并通过 VirtualBox 共享文件夹进行访问。
- 我的一些代码(包括此存储库)位于主机系统 (Windows 10) 上,因为它是特定于平台的。
- 如果我使用 Windows 版 Git,则不会出现此问题。
- 如果我克隆到 linux 文件系统,则不会出现此问题。
- 如果我从上游克隆到不同的 Windows 文件夹并从 linux 访问,我会遇到同样的问题。
- 同一存储库中具有相同文件但内容不同的其他分支再次不会遇到同样的问题(即 checkout 按预期工作)
- 使用相同版本文件的其他提交也有同样的问题。
- 仅包含这两个文件版本的小型存储库不会表现出相同的行为,因此不幸的是,创建 MCVE 并不容易。
最后的想法
老实说,这是一个相对容易解决的问题,而且到目前为止似乎范围仅限于 的这两个副本,但它让我很感兴趣。如果任何对 git 有更多了解的人对如何诊断/修复此问题的根本原因有任何想法,我将不胜感激。
额外调试
这是 git ls-files --debug
的结果来自 <branch1>
CodeSheet.xlsx
ctime: 1489465633:751038200
mtime: 1489465633:751038200
dev: 38 ino: 5432
uid: 0 gid: 999
size: 14752 flags: 0
这是 git ls-files --debug
的结果来自 <branch2>
Codesheet.xlsx
ctime: 1489467487:720851100
mtime: 1489467487:720851100
dev: 38 ino: 5502
uid: 0 gid: 999
size: 12546 flags: 0
最佳答案
只是一个猜测:这可能是一个 case of a file with a different case but the same name .
从不区分大小写的 Windows 操作系统的角度来看,它被跟踪,但从区分大小写的 Debian 操作系统的角度来看,它不被跟踪。
尝试:
git config core.ignorecase true
OP Gavin提及 in the comments使用“Changing capitalization of filenames in Git ”,与 git mv
命令。
关于linux - 如何修复被视为未跟踪的 git 跟踪文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42777726/