1

我在远程服务器文件夹 /home/bare/mygit.git 中初始化了我的 git 裸仓库

我已经克隆了这个 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 或其他东西)。

权限没问题,克隆/拉/取也没问题。日志中没有错误或类似的东西。

4

2 回答 2

1

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

当我运行 dmesg 时,我从内核中看到了很多错误。我决定先重新启动服务器,然后再深入研究,但是在服务器重新启动后问题就消失了。

感谢大家的帮助!

于 2013-09-16T08:48:30.203 回答
0

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

请参阅Michael Haggerty ( )的提交 4ff0f01(2017 年 8 月 21 日) 。(由Junio C Hamano 合并——提交 f2dd90f中,2017 年 8 月 27 日)mhagger
gitster

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

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

更确切地说:

refs: 重试获取引用锁 100ms

引用锁定的理念是,“如果另一个进程正在更改引用,那么无论我试图对它做什么都可能会失败,因为我的旧 SHA-1 值可能不再是当前的”。

但是,如果其他进程已锁定引用以执行不会实际更改引用值的操作,例如pack-refsor ,则此论点会失败reflog expire
实际上,在其他进程释放锁之后,计划的引用更新仍然能够通过的可能性很大。

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

添加配置设置 ,core.filesRefLockTimeout以允许调整此设置。

于 2017-09-04T22:02:12.127 回答