2009-05-19 80 views
3

我已經簽出使用命令行SVN的代碼。我有一個我想運行的Ant構建腳本,它會在完成時執行提交。使用svnant沒有用戶名或密碼

我想用svnant,如

<svn svnkit="false" javahl="false" failonerror="true"> 
    <commit dir="${dir}" message="${message}"/> 
</svn> 

,但其不工作並給予此錯誤

[svn] <Commit> started ... 
[svn] svn: Commit failed (details follow): 
[svn] svn: OPTIONS of 'http://svn.local/path/to/my/proj': authorization failed (http://svn.local) 
[svn] <Commit> failed ! 

但是,如果我直接做一個exec,這樣

<exec executable="svn"> 
    <arg line="commit ${dir} -m '${message}'"/> 
</exec> 

它會正常工作。奇怪的是,使用svnkit="false"javahl="false"應該讓svnant使用命令行svn。

那麼這裏發生了什麼?我不應該在svnant調用中指定用戶名/密碼,因爲命令行svn顯然不需要它(它已被緩存)。

回答

1

簡單可靠的解決方案是將您所需的svn用戶名和密碼存儲在主目錄下的build.properties文件中,設置權限以便其他用戶無法讀取它,並將其加載到您的ant腳本中。

我在構建腳本中依賴auth緩存,這很煩人,因爲遲早不會緩存身份驗證,或者會緩存錯誤的身份驗證,並且在嘗試意識到錯誤時會浪費時間。或者您可能決定在不同的環境中運行ant,比如構建服務器,這會使svn的身份驗證緩存難以提供。最好從文件和程序中加載認證信息,以便在文件丟失時給出清晰的消息。

您也可以嘗試使用svnkit命令行客戶端緩存您的身份驗證,並查看在通過ant使用時是否仍然有效。

此線程討論相同的問題:http://www.nabble.com/svnant-and-authentication-td17865407.html