20

我能够很好地推动,但我突然收到这个“致命”信息

$ 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
...

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

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

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

    $ git推送

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

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

4

6 回答 6

35

https://stackoverflow.com/a/14160580

solved this for me:

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

replace kev with your user if you don't know your user:

whoami
于 2014-03-28T11:36:55.417 回答
10

小心操纵~/.git-credential-cache/socket(如chown),因为它自 2014 年以来已经移动,正如 Git 2.13(2017 年第二季度)所承认的那样,
Adam K Dean在评论中也提到了 path ~/.cache/git/credential/,它只需要回馈给用户。

请参阅Devin Lehmacher ( ) 的提交 612c49e提交 60759ba(2017 年 3 月 17 日)和提交 e7f136b(2017 年 3 月 13 日(由Junio C Hamano 合并——提交 78cf8ef中,2017 年 3 月 24 日)lehmacdj
gitster

凭据缓存:XDG_CACHE_HOME用于套接字

git-credential-cache默认情况下遵循XDG基本路径规范。这增加了与其他应用程序的一致性,并有助于使用户的主目录保持混乱

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

否则使用$XDG_CACHE_HOME/git/credential/socket遵循 XDG 基本路径规范的套接字。
使用子目录credential/以防将来缓存其他文件$XDG_CACHE_HOME/git/并明确套接字的用途。


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

请参阅Junio C Hamano () 的提交 c0e190c提交 7cff3b6提交 675df19(2020 年 8 月 26 日(由Junio C Hamano 合并 -- --提交 18aff08中,2020 年 9 月 3 日)gitster
gitster

credential-cache: 利用child_process.args

由于child_process结构具有strvec args用于制定命令行的嵌入,因此让我们使用它而不是使用argv[]需要正确维护长度的外联。

此外,当产生git子命令时,从命令列表中省略它,而是使用结构.git_cmd中的位child_process

因此,不再调用git-credential-cache--daemon,而是调用git credential-cache--daemon

于 2017-04-11T20:38:12.470 回答
4

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

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

于 2014-08-11T09:20:06.677 回答
2

快速解决方案

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

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

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

于 2020-03-13T15:02:15.483 回答
0

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

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

于 2020-03-05T07:08:44.043 回答
0

尝试设置全局 gitconfig。

git config --global user.name "your username"
git config --global user.email "your email address"
于 2019-07-02T10:32:57.927 回答