Git 随机丢失跟踪

Git loses tracking randomly

我有两周的问题 git,更准确地说 git for windows (Git-2.36.1-64).

这是非常奇怪的行为,随机导致(对我来说是随机的)git 丢失文件跟踪。我的意思是,我修改了 10 个文件,当我提交时,它将提交 7 个文件,但忘记了另外 3 个文件。然后我必须 运行 两个命令:“git rm --cached .-r”和“git reset。”这个命令总是对我有帮助。有时它会保留所有文件 2 小时,有时会忘记所有文件。 “git status”命令显示 repo 是干净的,没有任何东西处于阶段或非阶段模式。即使我修改文件......有时它会保留文件,有时不会。这不是控制台、VS 代码或 Visual Studio 相同问题的问题,只是失去了跟踪。

不幸的是,所有存储库都会发生这种情况。重新安装 git 或使用 git 便携版没有帮助。我还在 Windows 中使用了“重置 PC”,但保留了我的文件,它删除了环境变量等。也没有帮助。

我 100% 确定这些存储库没问题,因为我的同事使用来自我们 Azure DevOps 的相同存储库。我也在我的第二台电脑上使用了这个 repos,从来没有遇到过这样的问题。

我 运行 没有想法,这非常打扰我的日常工作...

关于 Windows,我使用的是最新版本的 Windows 11。也许这是问题所在?

编辑:今天又发生了,所以我可以展示发生了什么。

  1. 文件正在修改但尚未保存
  1. 文件已保存并从更改中消失
  1. Git 状态也显示工作树清理
  1. 运行 Git rm --cached 。 -r 和 git 重置 .
  1. 现在git跟踪文件

[edit] 这个答案首先表明文件同步服务存在问题,但经过进一步调试后,您的问题似乎与您本地存储库中设置的某些标志有关:

运行 git ls-files --debug | grep -B5 "flags: [^0]" 您确定某些文件设置了 assume-unchanged 标志(显示为 flags: 8000)。

您可以阅读 Using assume unchanged bit section of git help update-index 了解更多详情(或头痛 ;))。

这是从单个文件中删除该标志的命令:

git update-index --no-assume-unchanged <filepath>

获取 assume-unchanged 个文件的完整列表有一个更短的方法:

git ls-files -v | grep "^[a-z]"   # see 'git help ls-files' :
                                  # status is lowercase if assume-unchanged

# to "un assume unchange" all files in one go :
git ls-files -v | grep "^[a-z]" | awk '{ print  }' |\
    xargs git update-index --no-assume-unchanged

同时检查 core.ignorestat 配置值:它应该设置为 false(或者您应该知道将其设置为 true 的充分理由)

git config core.ignorestat

一些其他配置变量影响 git 如何处理其索引,它们都以 core. 开头(阅读 git help update-index 并搜索 core. 以列出它们):

git config --show-origin --get-regexp core

# config variables to look for (2022-05-31 - git version 2.35.0) :
#   core.filemode
#   core.fsmonitor
#   core.ignorestat
#   core.splitIndex
#   core.symlinks
#   core.trustctime
#   core.untrackedCache