【问题标题】:How to fix a git tracked file that is treated as untracked?如何修复被视为未跟踪的 git 跟踪文件?
【发布时间】:2017-08-04 07:13:30
【问题描述】:

症状

我有一个奇怪的问题,我想签出一个不同的分支<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&lt;filename.xlsx&gt; 列为跟踪文件。

解决方法

如果我执行git checkout -f &lt;branch2&gt;,它可以工作,并且 Excel 文件的 &lt;branch2&gt; 版本存在且正确(类似地,如果我 rm &lt;filename.xlsx&gt; 然后结帐,我会得到正确的文件。)

回到&lt;branch1&gt;,我遇到了完全相同的问题(&lt;filename.xlsx&gt; 已被跟踪,但结帐时似乎未跟踪)。

测试/故障排除

进一步调查这似乎与 Windows/Linux 问题有关:

  • 我主要在 Debian 的 VirtualBox VM 中工作,因此我在那里使用我的 git 工具和终端,并通过 VirtualBox 共享文件夹进行访问。
  • 我的一些代码(包括此存储库)存在于主机系统 (Windows 10) 上,因为它是特定于平台的。
  • 如果我使用适用于 Windows 的 Git,则不会出现此问题。
  • 如果我克隆到 linux 文件系统,则不会出现此问题。
  • 如果我从上游克隆到不同的 Windows 文件夹并从 linux 访问,我会遇到同样的问题。
  • 同一存储库中具有相同文件但内容不同的其他分支再次不会遇到相同的问题(即签出按预期工作)
  • 具有相同文件版本的其他提交具有相同的问题。
  • 只有这两个文件版本的小型 repo 不会表现出相同的行为,因此很遗憾,没有简单的方法来创建 MCVE。

最后的想法

老实说,这是一个相对容易解决的问题,到目前为止,范围似乎仅限于 的这两个副本,但它让我很感兴趣。如果任何对 git 有更深入了解的人对如何诊断/修复此问题的根本原因有任何想法,我将不胜感激。

额外调试

这是git ls-files --debug 来自&lt;branch1&gt; 的结果

CodeSheet.xlsx
  ctime: 1489465633:751038200
  mtime: 1489465633:751038200
  dev: 38   ino: 5432
  uid: 0    gid: 999
  size: 14752   flags: 0

这是git ls-files --debug 来自&lt;branch2&gt; 的结果

Codesheet.xlsx
  ctime: 1489467487:720851100
  mtime: 1489467487:720851100
  dev: 38   ino: 5502
  uid: 0    gid: 999
  size: 12546   flags: 0

【问题讨论】:

  • 令人费解,因为“未跟踪”的字面意思是“不在索引中”。我建议使用git ls-files --debug 更仔细地检查事物,并检查“不可见”的文件名字符(空格、非打印控制字符等)。
  • @torek 在那里看了一眼,弹出的主要内容是两个分支之间的大小写更改(我之前没有注意到)。这显然是原因。多谢了。至少我现在可以“修复”它。

标签: linux windows git virtualbox


【解决方案1】:

只是猜测:这可能是case of a file with a different case but the same name
从不区分大小写的 Windows 操作系统的角度来看,它被跟踪,但从区分大小写的 Debian 操作系统的角度来看,它是跟踪的。

试试:

 git config core.ignorecase true

OP Gavin 使用“Changing capitalization of filenames in Git”和git mv 命令提及in the comments

【讨论】:

  • 谢谢。最后我确实发现这确实是一个案例问题。我应该点击这可能是导致该问题的原因,因为我想我什至在搜索时瞥了一眼该问题。通过使用您在git mv 上的回答,我以不同的方式解决了这个特定的问题实例。
  • @Gavin 太好了。我在答案中包含git mv 以获得更多可见性。
猜你喜欢
  • 1970-01-01
  • 2017-03-15
  • 2018-07-21
  • 1970-01-01
  • 2017-12-30
  • 2017-01-16
  • 1970-01-01
  • 2015-01-11
  • 2012-01-18
相关资源
最近更新 更多