簡體   English   中英

如何修復被視為未跟蹤的git跟蹤文件?

[英]How to fix a git tracked file that is treated as untracked?

症狀

我有一個奇怪的問題,我想要簽出一個不同的分支<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>然后checkout我得到正確的文件。)

要回到<branch1>我會得到完全相同的問題(跟蹤<filename.xlsx> ,但是對於checkout似乎沒有跟蹤)。

測試/故障排除

進一步調查這似乎與Windows / Linux問題有關:

  • 我主要在Debian的VirtualBox VM中工作,所以我在那里使用我的git工具和終端,並通過VirtualBox共享文件夾訪問。
  • 我的一些代碼(包括此存儲庫)存在於主機系統(Windows 10)上,因為它是特定於平台的。
  • 如果我使用Git for Windows,則不會出現此問題。
  • 如果我克隆到linux文件系統,則不會發生此問題。
  • 如果我從上游克隆到另一個Windows文件夾並從linux訪問我得到同樣的問題。
  • 同一存儲庫中具有相同文件且具有不同內容的其他分支不會遭受同樣的問題(即,檢出工作按預期工作)
  • 具有相同版本文件的其他提交具有相同的問題。
  • 只有這兩個文件版本的小型repo沒有表現出相同的行為,所以,遺憾的是,沒有簡單的方法來創建MCVE。

最后的想法

老實說,這是一個相對容易解決的問題,到目前為止只有這兩個副本的范圍有限,但它讓我很感興趣。 如果對git有更多了解的人對如何診斷/解決這個問題的根本原因有任何想法,我將非常感激。

額外的調試

以下是來自<branch1>git ls-files --debug的結果

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

以下是來自<branch2>git ls-files --debug的結果

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

只是一個猜測:這可能是一個具有不同情況但名稱相同的文件的情況
從不區分大小寫的Windows操作系統角度來看,它是跟蹤的,但從區分大小寫的Debian OS角度來看,它沒有被跟蹤。

嘗試:

 git config core.ignorecase true

OP Gavin 在評論中使用git mv命令使用“ 在Git中更改文件名的大寫 ”來提及。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM