多个用户可以同时提交到SVN吗?线程安全吗?



应用程序必须设计成在提交到SVN repository时支持多个用户的方式。我完成了应用程序和相关的东西,然而,我被这个多用户的东西困住了。我怎么能做到这一点?我在某个地方看到对于每个线程,你必须实例化一个单独的SVNRepository驱动程序。告诉它不是线程安全的。也可能是我完全搞错了。在这个问题上的任何帮助都是感激的。谢谢。

我从这里得到上面的信息(斜体部分)

我是SVNKit的开发者,让我来解释一下它是如何工作的。

SVNRepository类表示一个带有自己凭据的SVN连接。它是线程不安全的,这意味着您只能对它执行顺序操作。更多详细信息请参阅本文:

http://vcs.atspace.co.uk/2012/09/21/are-svnkit-methods-reenterable/

所以如果你的应用试图同时创建几个提交,你应该使用几个独立的SVNRepository实例。好消息是不需要特殊的同步代码,所有同步都在服务器端执行。另一个好消息是,当某个SVNRepository对象的提交完成或取消时,您可以重用该连接来启动另一个提交。但是请注意,如果你使用http协议,你不能重用同一个连接来代表另一个用户提交,即使你改变了连接的凭据(SVNRepository#setAuthenticationManager)。

要创建一个没有工作副本的提交,使用SVNRepository#getCommitEditor启动提交事务。使用ISVNCommitEditor#closeEdit或ISVNCommitEditor#abortEdit来停止事务;您可以在SVNRepository实例上执行其他操作,直到commit事务完成。

ISVNCommitEditor实例应该描述你的虚拟工作副本:它告诉SVNKit你当前对最新工作副本状态的了解。如果描述不符合实际的最新更改,则会得到"文件或目录过期;尝试更新" error.

http://vcs.atspace.co.uk/2012/07/20/subversion-remote-api-committing-without-working-copy/

你可以在ISVNEditor#openFile/openDir中使用-1代替真正的修订来禁用检查,但这可能会导致另一个问题:你可以在不知道它们的情况下覆盖更改。

另一种选择是在文件系统上使用实际工作副本和实际更改提交(使用svoperationfactory #createCommit)。但即使在这种情况下,看看第一个链接,了解哪些对象可以/不可以跨线程重用。

希望这对你有帮助,如果你有其他问题,请随时在SVNKit邮件列表上提问。

最新更新