我在远程服务器文件夹/home/bare/mygit.git 中初始化了我的 git 裸存储库
我已经克隆了这个存储库:
git clone user@ip.of.my.server:/home/bare/mygit.git .
然后我正在处理项目,进行提交/推送等......
但是今天我在推送时注意到此错误:
user@host:/var/www/mygit (master)$ git push origin master
user@ip.of.my.server's password:
Counting objects: 5, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 297 bytes, done.
Total 3 (delta 2), reused 0 (delta 0)
fatal: Unable to create '/home/bare/mygit.git/refs/heads/master.lock': Invalid argument
fatal: The remote end hung up unexpectedly
fatal: recursion detected in die handler
我搜索了这个问题,但似乎大多数人对权限有问题。但在这种情况下,错误看起来不同(例如权限被拒绝或其他内容)。
权限没问题,克隆/拉取/获取没问题。日志中没有错误或类似的东西。
这不是与 git 相关的问题。最终我无法创建一些新文件。
当我运行 dmesg 时,我看到内核中有很多错误。我决定先重新启动服务器,然后再深入挖掘,但是重新启动服务器后问题已经消失。
感谢大家的帮助!
,在 Git 2.14.x/2.15(2017 年第 3 季度)中,该错误消息将不那么频繁。
参见 commit 4ff0f01 (21 Aug 2017) by Michael Haggerty ( mhagger
)。
(由Junio C Hamano -- gitster
-- 在提交f2dd90f中合并,2017年8月27日)
用于获取引用锁的代码(例如,在接受来自客户端的推送时)用于在引用已锁定时立即失败。
现在,它会等待很短的时间并重试,如果锁持有人在只读操作期间持有它,则可以使其成功。
更准确地说:
refs
:重试获取参考锁 100ms引用锁定的哲学是,"如果另一个过程是 更改引用,那么无论我尝试对它做什么,都会 无论如何都可能失败,因为我的旧 SHA-1 值可能不再 当前"。
但是如果另一个进程已锁定,则此论点会失败 对执行实际上不会更改值的操作的引用 的引用,例如
pack-refs
或reflog expire
。
实际上,计划中的参考更新很有可能 在其他进程发布后仍然能够通过 锁。因此,当尝试锁定单个引用时(例如,在创建时 "
refs/heads/master.lock
"),如果它已被锁定,则重试 锁定采集大约 100 毫秒,然后放弃。这 应该消除一些不必要的锁冲突而不会浪费很多 的时间。添加配置设置
core.filesRefLockTimeout
以允许此操作 要调整的设置。