3

我已经使用命令行 SVN 检查了代码。我有一个我想运行的 Ant 构建脚本,它会在完成后进行提交。

我想用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"andjavahl="false"应该让 svnant 使用命令行 svn。

那么这里发生了什么?我不应该在 svnant 调用中指定用户名/密码,因为命令行 svn 显然不需要它(它已被缓存)。

4

1 回答 1

1

简单可靠的解决方案是将所需的 svn 用户名和密码存储在主目录中的 build.properties 文件中,设置权限以使其他用户无法读取它,然后将其加载到您的 ant 脚本中。

我依赖于构建脚本中的身份验证缓存,这很烦人,因为迟早身份验证不会被缓存,或者错误的身份验证会被缓存,当你试图意识到什么是错误的时候,你会浪费时间。或者您可能决定在不同的环境中运行 ant,例如构建服务器,这使得提供 svn 的身份验证缓存变得困难。最好从文件和程序 ant 加载您的身份验证信息,以便在该文件丢失时给出明确的消息。

您还可以尝试使用 svnkit 命令行客户端来缓存您的身份验证,并查看在通过 ant 使用时是否仍然有效。

该线程讨论了相同的问题: http: //www.nabble.com/svnant-and-authentication-td17865407.html

于 2009-05-19T18:00:41.367 回答