【问题标题】:Why does git freeze on git-credential-osxkeychain sometimes?为什么 git 有时会冻结在 git-credential-osxkeychain 上?
【发布时间】:2013-04-17 16:01:09
【问题描述】:

当我在我的 bash 终端中执行 cd some-repo; git push origin master 时,它不会要求我输入用户名/密码,因为我猜 git 已经保存了它(那是很久以前的事了,我不记得它是如何进行的细节了下)。我正在推送到 GitHub 存储库作为远程源。

所以我有一个执行 fork 的 C++ 程序

execl("/bin/bash", "/bin/bash", "-c", "cd some-repo; git push origin master", (char *)0);

然后等待子 bash 进程完成。

有时它工作得很好,但其他时候(似乎是随机的)它会冻结。查看正在运行的进程层次结构,我看到:

MyProgram
  git
    git-remote-http
      git
        git-credential-osxkeychain

如果我终止了子级 git-credential-osx 进程,我的程序将恢复(因为父级 git 命令完成),输出并不令人惊讶,例如:

error: git-credential-osxkeychain died of signal 15
error: RPC failed; result=7, HTTP code = 0
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly

我的问题:为什么git push origin master 在 bash 终端中似乎总是有效(不询问我任何用户名密码或其他标准输入),但有时会在 git-credential-osxkeychain 上挂起(可能会在标准输入上询问某些内容)但是不是其他时候从我的 C++ 程序运行它吗?

我尝试在 git-credential-osxkeychain 上查找手册页,但实际上找不到任何东西。运行它只打印Usage: git credential-osxkeychain <get|store|erase>,这对我来说不够自我解释。谢谢!

我正在运行 OS X 10.8.3; git 版本 1.7.12.4 (Apple Git-37); GNU bash,版本 3.2.48(1)-release (x86_64-apple-darwin12)。

【问题讨论】:

  • 你是在 ssh'ing 到盒子里,还是在本地运行?您是否碰巧看到一个窗口弹出询问您的登录密码?或者它可能隐藏在窗户后面?凭证助手是相当新的,所以您的密码可能还没有在钥匙串中。但是,您可能需要不时“解锁”钥匙串,因此您应该会看到一个对话框弹出询问您的登录凭据。
  • 我在本地运行。我没有看到任何弹出窗口,这次我尝试寻找它。它没有出现。但是,这听起来很可能是导致问题的原因。我想它是 supposed 弹出的,但事实并非如此。但是,奇怪的是,如果我只在我的应用程序中使用 Terminal.app,它就不会发生。也许它与默认环境变量有关......

标签: macos git bash keychain


【解决方案1】:

没有太多信息,我的猜测是挂起取决于您的登录钥匙串当时是否被锁定。在 Mac 上,如果登录钥匙串已解锁,则获取您的用户名和密码的查询可以不受阻碍地进行。但如果钥匙串被锁定,那么 Mac OS X 会提示您输入登录密码以解锁钥匙串。我怀疑对话框在那里,只是隐藏在某些东西后面,所以你可能错过了它。它会等待您输入密码,从而有效地挂起该过程。

有更多关于 gitcredential infrastructure here 的信息,以及关于 API(包括帮助程序的命令行)here 的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 2016-02-04
    • 1970-01-01
    • 2013-06-10
    • 2012-06-19
    相关资源
    最近更新 更多