linux - 如何修复被视为未跟踪的 git 跟踪文件?

标签 linux windows git virtualbox

症状

我有一个奇怪的问题,我想 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/

相关文章:

android - DDMS 和虚拟创建器在 Eclipse 中不起作用

c - malloc/calloc返回的内存地址是从虚拟地址空间来的吗?

linux - 任何一方都可以启动连接时的安全性

git - 我如何在 git 中找到包含(而不是触摸)文件的所有提交?

git clean 不删除子目录(非递归)

linux - 在 bash 中使用 awk 或 sed 编辑文本

linux - 如何从内核中的 UDP 读取缓冲区中删除数据包?

windows - 如何使用 ImageMagick 批量转换 pdf 并对流程进行基准测试?

Windows 8 支持 d3d8.dll?

java - 从 Eclipse 推送到 github 时项目丢失