【问题标题】:unable to connect to cache daemon?无法连接到缓存守护进程?
【发布时间】:2012-10-08 09:37:04
【问题描述】:

我可以很好地推送,但我突然收到这个“致命”信息

$ git push
fatal: unable to connect to cache daemon: Bad file descriptor
Username for 'https://github.com':
Password for 'https://myid@github.com':
fatal: unable to connect to cache daemon: Bad file descriptor
...

为什么我会突然收到这条消息?我该怎么办?

我不确定这是否会有所帮助,但从现在到此问题发生之前

  • 我正在处理一些不是 master 的分支
  • 我在 git config --global 中更改了我的 user.email
  • 我的计算机严重崩溃了,因为我将错误的项目连接器(不适用于计算机)连接到它,并且我相信某些文件已损坏
  • 之后,当我尝试进行新提交时,我收到以下消息:致命:无法将 HEAD 解析为有效参考。
  • 然后我通过将配置中的 HEAD 修改为“ref: refs/heads/master”来修复它
  • 在本地编码并成功提交更改后,当我尝试将其推送到远程服务器时,我收到以下错误消息

    $ git 推送

    致命:无法连接到缓存守护进程:错误的文件描述符 “https://github.com”的用户名: “https://myid0@github.com”的密码: 致命:无法连接到缓存守护进程:错误的文件描述符 致命:松散对象 8ce710b1c78658e066cd2309b12b7766d1be4920(存储在 .git/objects/8c/e710b1c78658e066cd2309b12b7766d1be4920 中)已损坏 致命:远端意外挂断 致命:远端意外挂断 致命:写入错误:错误的文件描述符

  • 所以我备份了我所做的所有更改,删除了 repo,从 github 克隆了 repo,并对备份文件进行了一些更改,添加、提交和推送更改很好......但仍然该消息不会消失:(

【问题讨论】:

  • 我有个同事遇到了一个非常相似的错误,除了“错误的文件描述符”,他看到的是“权限被拒绝”。但是推送是有效的,所以“致命”显然不是致命的。

标签: git


【解决方案1】:

谨防操纵 ~/.git-credential-cache/socket(与 chown 一样),因为它自 2014 年以来已经移动,正如 Git 2.13(2017 年第二季度)所承认的那样
Adam K Dean 还提到 in the comments 路径 ~/.cache/git/credential/,这只是需要回馈给用户。

参见Devin Lehmacher (lehmacdj)@commit 612c49ecommit 60759ba(2017 年 3 月 17 日)和commit e7f136b(2017 年 3 月 13 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit 78cf8ef,3 月 24 日2017)

凭据缓存:将XDG_CACHE_HOME 用于套接字

使git-credential-cache跟随XDG base path specification 默认。这增加了与其他应用程序的一致性并有助于 避免用户主目录混乱

检查旧的套接字位置,~/.git-credential-cache/,然后使用 ~/.git-credential-cache/socket 如果该目录存在而不是 强制之前使用过git credential-cache的用户迁移到 新的 XDG 兼容位置。

否则使用$XDG_CACHE_HOME/git/credential/socket下面的socket XDG 基本路径规范。
使用子目录credential/ 以防万一 其他文件在未来缓存在$XDG_CACHE_HOME/git/ 下 明确套接字的用途。


注意:在 Git 2.29(2020 年第四季度)中,树内代码中的少数地方仍然依赖于能够执行 git(man) 子命令,尤其是内置 - ins,“git-foo”形式,已更正。

参见commit c0e190ccommit 7cff3b6commit 675df19(2020 年 8 月 26 日)Junio C Hamano (gitster)
(由 Junio C Hamano -- gitster -- 合并到 commit 18aff08,2020 年 9 月 3 日)

credential-cache:使用child_process.args

由于child_process 结构有一个嵌入的strvec args 用于制定命令行,所以让我们使用它而不是使用需要正确维护长度的外部argv[]

此外,当生成 git 子命令时,将其从命令列表中省略,而使用 child_process 结构中的 .git_cmd 位。

所以,不要再拨打git-credential-cache--daemon,而是拨打git credential-cache--daemon

【讨论】:

  • 在我的例子中,路径是~/.cache/git/credential/,它只需要返回给用户。
  • @AdamKDean 谢谢。我已将您的评论包含在答案中以提高知名度。
【解决方案2】:

https://stackoverflow.com/a/14160580

为我解决了这个问题:

sudo chown kev ~/.git-credential-cache/socket

如果您不认识您的用户,请将 kev 替换为您的用户:

whoami

【讨论】:

  • chown: cannot access ‘/home/butko/.git-credential-cache/socket’: No such file or directory :/ 但我的错误是:fatal: unable to connect to cache daemon: Permission denied
  • 在最新版本的 Linux(例如 Ubuntu 18)上,如下面的 Alwaysimproving 以及这里提到的 -- gist.github.com/diegopacheco/ca7aeb7f6ce283d7d13b710f5301e969 -- 这是有效的命令:sudo chown $(whoami) ~/.cache/git/credential/socket
【解决方案3】:

快速解决方案

这是解决问题所需的单个命令。

sudo chown $(whoami) ~/.cache/git/credential/socket

如果您想更深入地了解导致此问题的原因,请阅读其他答案。

【讨论】:

    【解决方案4】:

    尝试设置全局 gitconfig。

    git config --global user.name "your username"
    git config --global user.email "your email address"
    

    【讨论】:

    • 试着解释为什么你的回答是有帮助的
    • 这个答案与问题有什么关系?
    【解决方案5】:

    当您尝试使用“sudo”提交时会出现此错误。
    所以保存的密码仅供“sudo”用户使用,

    但是当您尝试以普通用户的身份提交时,
    发生此错误,普通用户的权限被拒绝
    您可以通过使用上述答案 Kev Price

    来消除此错误

    【讨论】:

      【解决方案6】:

      这可能是因为你第一次设置为root用户,然后你想以另一个用户身份使用git。你可以更改git缓存权限:

      chown -R user:user_group ~/.cache/git/

      【讨论】:

        猜你喜欢
        • 2017-06-14
        • 1970-01-01
        • 1970-01-01
        • 2014-03-19
        • 2016-10-25
        • 2016-10-14
        • 1970-01-01
        • 2021-10-27
        • 2016-04-04
        相关资源
        最近更新 更多