我在远程服务器文件夹/home/bare/mygit.git中初始化了我的git bare repo
我克隆了这个回购:
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
我搜索了这个问题,但似乎大多数人都有权限问题。但在这种情况下,错误看起来不同(如Permission denied或者其他内容)。
权利还可以,克隆/拉/取是没关系的。日志中没有错误或类似的错误。
答案 0 :(得分:1)
这不是一个与git相关的问题。最终我无法创建一些新文件。
当我运行dmesg时,我看到内核出现了很多错误。我决定先重新启动服务器,然后深入挖掘,但在重新启动服务器之后问题已经消失。
感谢大家的帮助!
答案 1 :(得分:0)
注意,使用Git 2.14.x / 2.15(2017年第3季度),该错误消息将不那么频繁。
commit 4ff0f01见Michael Haggerty (mhagger
)(2017年8月21日)
(Junio C Hamano -- gitster
--于2017年8月27日commit f2dd90f合并)
获取对引用的锁定的代码(例如,在接受来自客户端的推送时),当引用已被锁定时,该代码会立即失败。
现在它等待很短的时间并重试,如果锁定持有者在只读操作期间持有它,这可以使它成功。
更确切地说:
refs
:重试获取参考锁100ms参考锁定的理念是,“如果另一个过程是 改变参考,然后无论我想做什么都会 可能会失败,因为我的旧SHA-1值可能不再 目前“。
但如果其他进程已经锁定,这个论点就会失败 做一些实际上没有改变价值的东西的参考 参考文献,例如
pack-refs
或reflog expire
实际上 是计划参考更新的一个不错的机会 在其他进程发布之后仍然可以通过 锁。因此,在尝试锁定单个引用时(例如,在创建时) “
refs/heads/master.lock
”),如果已经锁定,则重试 在放弃之前锁定采集约100毫秒。这个 应该消除一些不必要的锁定冲突,而不会浪费很多 时间。添加配置设置
core.filesRefLockTimeout
以允许此操作 设置要调整。