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。也许这是问题所在?
编辑:今天又发生了,所以我可以展示发生了什么。
- 文件正在修改但尚未保存
- 文件已保存并从更改中消失
- Git 状态也显示工作树清理
- 运行 Git rm --cached 。 -r 和 git 重置 .
- 现在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
我有两周的问题 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。也许这是问题所在?
编辑:今天又发生了,所以我可以展示发生了什么。
- 文件正在修改但尚未保存
- 文件已保存并从更改中消失
- Git 状态也显示工作树清理
- 运行 Git rm --cached 。 -r 和 git 重置 .
- 现在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