使用Team City从Git Repo中查看。 (Gitlabs如果重要的话)
从Empty build目录开始。收到此错误:
致命:无法将'core.filemode'设置为'false'
(在Windows机器上运行,如果这很重要)
Team City正在运行的用户已更改为管理员以防万一。
当此命令退出时,.Git目录不是有效的Repo。
擦除整个“工作”目录无济于事。
它随机出现......
和此: git config --global --replace-all core.fileMode false
没有任何用处 - 无论有没有--replace-all,以管理员身份运行,或以其他用户身份运行(如果将'false'更改为'true',则会出现相同的错误,如果将其更改为'falseCD'它将错误更改为无效值 - 显然,它正在改变它。
有人有任何想法吗?
答案 0 :(得分:1)
Traderhunt Games traced this to some antivirus software,这是有道理的。原因与Git用于更新配置条目的过程有关。
当git config
运行并被告知要更改一个或多个配置key = value
字段时,例如将core.filemode
更改为false
,它实现此方法的方式是使用三步流程:
使用创建文件的OS服务调用创建新的空文件(.git/config.lock
),如果文件已存在则失败。如果此步骤失败,则表示另一个git config
(或等效)命令已在运行,我们必须等待它完成,然后再执行我们自己的git config
。
一次读取现有配置文件,一个key = value
条目。如果密钥是我们关心的密钥,请编写新 key = value
值,否则请复制现有的key = value
。
这里有一些关于允许重复的密钥的优点,而密钥只应该发生一次;有关详细信息,请参阅--replace-all
和--unset-all
选项git config
。请注意git config
本身对大多数键和值对几乎一无所知,只要您选择Git今天没有使用的键并且将来不会使用它们,您就可以创建自己的键/值对。 。 (你如何弄清楚Git将会和将来不会使用什么,比如说,2043年,我不知道。:-))主要例外是一些core.*
值,git config
了解,其他几个Git命令可以自行设置。
(请注意,--unset
的处理与替换非常相似。与非all
替换一样,它只会取消第一个匹配key = value
对的设置。取消设置只需不写给定的密钥,而不是编写替换key = value
。由于git config
只是逐行处理文件,这很容易另外,如果你的key = value
是全新的,Git会通过阅读所有行来处理这一点,注意它没有替换任何现有的key
,因此添加 a新的key = value
行。由于键是逐段列出的,但逻辑本身很简单,这有点复杂。)
最后,阅读整个现有配置并完全写出新配置(根据需要使用fflush
和fsync
以及fclose
等等),{{ 1}}调用OS服务以重命名文件,以便将git config
重命名为.git/config.lock
。 在这种情况下,这是流程失败的地方。
重命名,如果成功,可以使新配置生效和删除锁定文件,所有这些都是一个原子操作:任何其他Git命令都会看到完整的旧配置,来自原始.git/config
文件或完整的新配置,来自构建期间已知为.git/config
的新.git/config
文件。
另一个StackOverflow问题:Will we ever be able to delete an open file in Windows? accepted answer包括以下声明:无法打开启用了完全共享(包括删除)的文件的反病毒产品存在错误。如果是这种情况 - 也就是说,如果这个特定的AV软件无法打开“允许删除”标志,并且如果这样的软件有问题,那么这个特定的AV软件就是问题并且有问题。
答案 1 :(得分:1)
对于我来说,使用“ sudo”对我有用。例如:
asif@asif-vm:/mnt/prog/protobuf_tut$ git clone https://github.com/protocolbuffers/protobuf.git
Cloning into 'protobuf'...
error: chmod on /mnt/prog/protobuf_tut/protobuf/.git/config.lock failed: Operation not permitted
fatal: could not set 'core.filemode' to 'false'
执行“ sudo”后,我可以使它工作:
asif@asif-vm:/mnt/prog/protobuf_tut$ sudo git clone https://github.com/protocolbuffers/protobuf.git
Cloning into 'protobuf'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 66782 (delta 0), reused 0 (delta 0), pack-reused 66777
Receiving objects: 100% (66782/66782), 55.83 MiB | 2.04 MiB/s, done.
Resolving deltas: 100% (45472/45472), done.
Checking out files: 100% (2221/2221), done.