2013-04-01 22 views
1

當我在我的bash終端上做cd some-repo; git push origin master時,它並不要求我輸入用戶名/密碼,因爲我猜git已經保存了它(這是很久以前我不記得詳細信息的原因了)。我正在推動GitHub回購作爲遠程起源。爲什麼git有時會凍結git-credential-osxkeychain?

所以我有一個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 

如果我殺了孩子最混帳憑據OSX過程中,我的程序恢復(因爲父母最混帳命令完成),用並不奇怪輸出,如:

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-憑證-osxkeychain有時但不是其他時候,當我從我的C++程序運行它?

我試着在git-credential-osxkeychain上尋找man page並且找不到任何東西。運行它只打印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)。

+1

你是ssh'ing到盒子裏,或本地運行?你碰巧看到一個窗口彈出窗口詢問你的登錄密碼嗎?或者它可能隱藏在窗戶後面?憑證助手是相當新的,所以你的密碼可能還沒有在鑰匙串中。但是,您可能必須不時「解鎖」鑰匙串,因此您應該會看到一個對話框,彈出詢問您的登錄憑證的信息。 – jszakmeister

+0

我在本地運行。我沒有看到任何彈出式窗口,這次我嘗試過尋找它。它沒有顯示出來。但是,這聽起來很可能是造成這個問題的原因。我想它是彈出來的,但事實並非如此。但是,如果我使用Terminal.app,則不會發生這種情況,這隻會發生在我的應用程序中。也許它與默認的環境變量有關...... –

回答

1

沒有太多的信息,我的猜測是懸掛取決於您的登錄鑰匙串是否被鎖定在當時。在Mac上,如果登錄鑰匙串已解鎖,那麼獲取用戶名和密碼的查詢可以不受阻礙地進行。但是,如果鑰匙串被鎖定,那麼Mac OS X希望提示您輸入登錄密碼來解鎖鑰匙串。我懷疑對話框在那裏,只是隱藏在某個東西后面,所以你可能錯過了它。它會等待你輸入你的密碼,有效地掛起這個過程。

有關於gitcredential infrastructure here的更多信息,以及API的更多信息(包括助手的命令行)here