2009-09-23 35 views
3

我找不到我應該如何從CakePHP項目fredistrano訪問存儲庫(您可以使用Web 2.0界面部署CakePHP)。我在共享的unix web服務器上的web廣播目錄中有fredistrano。當我從我的筆記本電腦使用tortoisesvn時,我必須使用svn + ssh://[email protected]/svnpath/trunk/。我嘗試在fredistrano使用相同的東西,但我不斷收到svn命令錯誤「svn:網絡連接意外關閉」。我複製並粘貼命令:svn export --non-interactive --username myusername --password mypwd svn + ssh://[email protected]/home/myusername/svn/mydomain.com/trunk tmpDir 2> & 1進入我的SSH終端連接到共享服務器,我得到一個提示輸入密碼,我相信這實際上是提示輸入SSH密碼,而不是SVN密碼(請參閱此post)。 fredistrano失敗,因爲它無法處理SSH密碼提示。我在fredistrano文檔中注意到,該示例使用http://ipaddress/svn/test作爲SVN URL。我將我的svn複製到了我的網絡廣播目錄,並嘗試了這種方法,但得到了連接拒絕錯誤。我的共享主機提供商相當嚴格,我懷疑我可以使用它。有沒有辦法讓svn + ssh能夠像這樣的PHP腳本工作(fredistrano只是使用shell_exec()來執行svn命令)?有沒有辦法讓我得到svn,http或者https工作(或者其他我不知道的方法)?如何在PHP腳本中使用svn + ssh?

+0

你應該對你的環境更具體。你在哪裏運行你的代碼/你的SSH命令?你的筆記本電腦,專用服務器或其他? – Koraktor 2009-09-23 14:16:40

+0

thx澄清問題。我添加了更多的細節。 – gabe 2009-09-23 14:25:38

回答

0

"svn: Network connection closed unexpectedly"最有可能意味着您的主機限制/禁止訪問其他主機。這可能意味着使用套接字(SVN,HTTP等)或可能只有非HTTP。在這種情況下,您應該嘗試設置您的SVN服務器以允許HTTP請求(例如,對於Apache使用mod_dav_svn)。

這只是一個猜測 - 請參閱我對您問題的評論。

+0

就像我在帖子中說的,我很確定這個特定的錯誤可能是由於PHP腳本無法處理使用svn + ssh運行svn命令之後發生的SSH密碼提示(錯誤可能意味着即嘗試連接超時或其他)。如果您爲svn命令指定了--password mypwd開關,則只包含svn密碼,而不是SSH密碼。 – gabe 2009-09-23 14:29:11

0

你如何從你的開發機器認證到svn-server?您可能正在使用密鑰進行身份驗證(您是否有膩子選美賽跑?)

+0

TortoiseSVN使用膩子,但我只是在它提示我時輸入密碼。當我直接連接到服務器W /一個膩子終端,我只需輸入我的用戶名和密碼。 – gabe 2009-09-23 15:02:04

+0

是的,但它是一個密碼(例如它是否被髮送到服務器)還是密碼(例如它是否在本地解鎖私鑰)。 – troelskn 2009-09-23 15:05:28

+0

我其實沒有任何按鍵設置。我剛剛一直在使用鍵盤互動。對不起我的無知,如果我失去了一些東西。仍然試圖在這個東西上變得更好。 – gabe 2009-09-23 15:51:46

1

我也對這個問題感興趣,我希望我接近解決方案。

我沒有試圖把它變成工作在我的應用由於缺少時間和其它高優先級的任務,但我想它應該是這個樣子:

shell_exec(svn something svn+ssh://...)

$response = trim(fgets(STDIN))

[然後檢查是否響應包含密碼提示文本]

fwrite(STDOUT, 'yourpassword');

[分析下反應,看看是否SVN返回所需的信息 - 日誌信息,無論]

+0

看起來很有趣。我沒有時間去嘗試,但是如果你明白了,那麼讓我知道你是否有機會。 – gabe 2009-11-06 16:25:52

0

或許檢查出Subversion PHP Module(1.0.3),而不是包裝shell_exec;它需要從源碼構建,其中phpize,./configuremake(只是針對PHP 5.6和Subversion 1.9.5構建的)...而Apache模塊mod_dav(通過HTTP/HTTPS進行Subversion)不是版本控制所必需的,而是一個訪問存儲庫的可選方法。