【发布时间】:2022-02-02 07:25:22
【问题描述】:
使用 Team City 从 Git 存储库中签出。 (如果重要的话,Gitlabs)
从空构建目录开始。得到这个错误:
致命:无法将“core.filemode”设置为“false”
(在 Windows 机器上运行,如果重要的话)
Team City 的运行用户已更改为管理员以防万一。
此命令退出时,.Git 目录不是有效的 Repo。
擦除整个“工作”目录没有帮助。
它随机地来来去去……
还有这个: git config --global --replace-all core.fileMode false
没有任何用处 - 使用或不使用 --replace-all,并以管理员或其他用户身份运行(如果将 'false' 更改为 'true' 会出现相同的错误,如果将其更改为 'falseCD'它将错误更改为无效值 - 很明显,它正在更改它。
有人有什么想法吗?
【问题讨论】:
-
很明显,Git 正在尝试更改配置设置,但失败了。不清楚的是为什么。 Git 通过创建
.git/config.lock来更新.git/config,在那里写入新配置,然后将完成的.git/config.lock重命名为.git/config。如果其中一个步骤失败(无法创建 .lock、无法写入 .lock 文件、无法将 .lock 文件重命名到位),则会出现上述错误。找出这三种情况中的哪一种以及为什么。 -
它只是创建了目录(之前没有 .git),所以如果有一个 config.lock 文件,那么这个进程只是将它创建为“git init”命令的一部分。它在目录中创建了许多其他文件,包括“config”文件,它对正在运行 git 的进程的机器具有完全的管理员访问权限。我相信,这已经排除了所有这三个......
-
因此,解决此问题的一种方法是告诉 git 在配置文件一开始就不要更新它。我在尝试将值设置为 false 和在另一个项目上都看到错误 'true' 。我尝试使用 --system 而不是 --global 并没有帮助。 (甚至不确定) - 哦,没有 config.lock 文件。如果它不能重命名文件,它应该发出一个错误说明(怀疑它确实如此),如果它不能创建它,它应该发出一个错误说明(怀疑它确实如此)。我宁愿期待它与任何看似显而易见的事情无关:-(
-
我不“做”Windows,但据我了解,Windows 具有强制文件锁定功能,如果某个进程打开文件而另一个进程尝试操作该文件,则第二个进程的尝试会失败.也许一些挥之不去的后台进程(TeamCity 的一部分?)正在打开一些东西,阻止 Git 在这里完成任何事情,尽管有管理员权限。
-
另一个线索 - 它似乎与由于某种原因无法更新文件'config'有关(它只是创建它),因为从 --system 级别删除了 core.filemode,现在它失败:致命:无法将'core.bare'设置为'false'