私がbashターミナルで行うときcd some-repo; git push origin master
、gitはすでにそれを保存していると思うので、ユーザー名/パスワードを求められません(それがどのようにダウンしたかの詳細を覚えていないほどずっと前です)。リモートオリジンとして GitHub リポジトリにプッシュしています。
だから私はフォークを行う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 で man ページを探してみましたが、実際には何も見つかりませんでした。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) リリース (x86_64-apple-darwin12)。