Git push to remote失败:无法创建../ refs / heads / master.lock:参数无效

时间:2013-09-15 15:02:20

标签: git push invalid-argument git-bare

我在远程服务器文件夹/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或者其他内容)。

权利还可以,克隆/拉/取是没关系的。日志中没有错误或类似的错误。

2 个答案:

答案 0 :(得分:1)

这不是一个与git相关的问题。最终我无法创建一些新文件。

当我运行dmesg时,我看到内核出现了很多错误。我决定先重新启动服务器,然后深入挖掘,但在重新启动服务器之后问题已经消失。

感谢大家的帮助!

答案 1 :(得分:0)

注意,使用Git 2.14.x / 2.15(2017年第3季度),该错误消息将不那么频繁。

commit 4ff0f01Michael Haggerty (mhagger)(2017年8月21日) Junio C Hamano -- gitster --于2017年8月27日commit f2dd90f合并)

获取对引用的锁定的代码(例如,在接受来自客户端的推送时),当引用已被锁定时,该代码会立即失败。

现在它等待很短的时间并重试,如果锁定持有者在只读操作期间持有它,这可以使它成功。

更确切地说:

  

refs:重试获取参考锁100ms

     

参考锁定的理念是,“如果另一个过程是   改变参考,然后无论我想做什么都会   可能会失败,因为我的旧SHA-1值可能不再   目前“。

     

但如果其他进程已经锁定,这个论点就会失败   做一些实际上没有改变价值的东西的参考   参考文献,例如pack-refsreflog expire   实际上 是计划参考更新的一个不错的机会   在其他进程发布之后仍然可以通过   锁。

     

因此,在尝试锁定单个引用时(例如,在创建时)   “refs/heads/master.lock”),如果已经锁定,则重试   在放弃之前锁定采集约100毫秒。这个   应该消除一些不必要的锁定冲突,而不会浪费很多   时间。

     

添加配置设置core.filesRefLockTimeout以允许此操作   设置要调整。