当我cd some-repo; git push origin master
在我的 bash 终端中执行此操作时,它不会要求我输入用户名/密码,因为我猜 git 已经保存了它(那是很久以前,我不记得它是如何下降的细节了)。我正在推送到 GitHub 存储库作为远程源。
所以我有一个 C++ 程序,它做一个 fork 和
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)。