我在使用 git 时遇到了两个星期的问题,更准确地说是在 windows 上使用 git (Git-2.36.1-64)。
这是非常奇怪的行为,导致随机(对我来说是随机的)git 丢失文件跟踪。我的意思是,我修改了 10 个文件,当我提交时,它会提交 7 个文件,但忘记了另外 3 个文件。然后我必须运行两个命令:“git rm --cached .-r”和“git reset”。这个命令总是对我有帮助。有时它会保留所有文件 2 小时,有时会忘记所有文件。“git status”命令显示存储库是干净的,没有任何内容处于阶段或非阶段模式。即使我修改文件...有时它保留文件,有时不保留文件。这不是控制台、VS Code 或 Visual Studio 的问题,同样的问题,只是失去跟踪。
不幸的是,所有存储库都会发生这种情况。重新安装 git 或使用 git portable 没有帮助。我还在 Windows 中使用了“重置电脑”,但保留了我的文件,它删除了环境变量等。也没有帮助。
我 100% 确定这些存储库没问题,因为我的同事使用来自我们的 Azure DevOps 的相同存储库。我也在我的第二台计算机上使用了这个存储库,并且从未遇到过这样的问题。
我已经没有想法了,这非常干扰我的日常工作......
关于Windows,我使用的是最新版本的Windows 11。也许这就是问题所在?
[编辑] 这个答案首先建议文件同步服务存在问题,但经过进一步调试,您的问题似乎与本地存储库中设置的一些标志相关联:
运行git ls-files --debug | grep -B5 "flags: [^0]"您确定某些文件设置了assume-unchanged标志(显示为flags: 8000)。
您可以阅读使用假设不变位部分git help update-index以获取更多详细信息(或令人头痛;))。
以下是从一个单独的文件中删除该标志的命令:
git update-index --no-assume-unchanged <filepath>
Run Code Online (Sandbox Code Playgroud)
有一种更短的方法来获取完整的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 $2 }' |\
xargs git update-index --no-assume-unchanged
Run Code Online (Sandbox Code Playgroud)
还要检查core.ignorestat配置值:它应该设置为 false (或者您应该知道将其保持为 true 的充分理由)
git config core.ignorestat
Run Code Online (Sandbox Code Playgroud)
其他一些配置变量会影响如何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
Run Code Online (Sandbox Code Playgroud)