【发布时间】: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,它就不会发生。也许它与默认环境变量有关......