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

时间:2017-03-14 04:23:37

标签: linux windows git virtualbox

症状

我有一个奇怪的问题,我想要结帐另一个分支<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>它可以正常工作,并且excel文件的<branch2>版本存在并且正确(类似于我rm <filename.xlsx>然后结帐我得到正确的文件。)

要返回<branch1>,我会收到完全相同的问题(<filename.xlsx>已被跟踪,但结帐似乎未跟踪。)

测试/故障排除

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

  • 我主要在Debian的VirtualBox VM中工作,所以我在那里使用我的git工具和终端,并通过VirtualBox共享文件夹进行访问。
  • 我的一些代码(包含此存储库)存在于主机系统(Windows 10)上,因为它是特定于平台的。
  • 如果我使用Git for Windows,则不会出现此问题。
  • 如果我克隆到linux文件系统,则不会发生此问题。
  • 如果我从上游克隆到另一个Windows文件夹并从linux访问,我会遇到同样的问题。
  • 同一存储库中具有相同文件并且具有不同内容的其他分支遭受同样的问题(即结帐按预期工作)
  • 具有相同版本文件的其他提交具有相同的问题。
  • 只有这两个文件版本的小型仓库没有表现出相同的行为,所以,遗憾的是,没有简单的方法来创建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

1 个答案:

答案 0 :(得分:3)

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

尝试:

 git config core.ignorecase true

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