Apache 如何将提交消息写入svn存储库
我正在使用ApacheJackrabbitWebDAV库进行svn签入操作 我正在使用MAKActivity方法启动事务 但我不知道如何添加提交消息。下面是代码Apache 如何将提交消息写入svn存储库,apache,svn,webdav,jackrabbit,Apache,Svn,Webdav,Jackrabbit,我正在使用ApacheJackrabbitWebDAV库进行svn签入操作 我正在使用MAKActivity方法启动事务 但我不知道如何添加提交消息。下面是代码 RandomStringGenerator rsg = new RandomStringGenerator(32); String random = rsg.nextString(); String url = getRepoAddress() + "!svn/act/" + random; MkActivityMethod activ
RandomStringGenerator rsg = new RandomStringGenerator(32);
String random = rsg.nextString();
String url = getRepoAddress() + "!svn/act/" + random;
MkActivityMethod activityMethod = null;
try
{
activityMethod = new MkActivityMethod(url);
client.executeMethod(activityMethod);
}
catch(Exception e)
{
e.printStackTrace();
}
这段代码执行成功,但我不明白如何在这段代码中写入日志消息。
任何帮助都是值得的。那么您正试图通过SVNAutoversioning on指令使用WebDAV执行SVN提交 顺便说一句,规范不允许您提供提交消息,服务器将始终为您创建一条提交消息。如果您试图通过Java创建SVN事务,可能需要查看SVNKit库
首先,我建议您不要重新发明已经做了两次的轮子,而是使用了解Subversion基于DAV协议的库。请注意,虽然Subversion主要与WebDAV和DeltaV兼容,但它确实具有非标准扩展 为此,我会给你指的是或。JavaHL附带Subversion,并使用JNI访问Subversion库。SVNKit是一个独立的纯Java实现,包括两个不同的接口,包括一个兼容JavaHL的接口。如果JavaHL使用本机库不会给您带来问题,我建议您这样做,因为您可以像几乎所有Subversion客户机一样使用相同的库 但是,如果您的目标是了解Subversion如何在WebDAV和DeltaV之上实现协议,那么您可能只想使用一个通用的WebDAV和DeltaV客户端库来提供帮助。我建议你参考这些 你可能想了解的一件事是。HTTPv2与DeltaV标准有一定差异。我们不使用
MKACTIVITY
在服务器上启动事务,而是使用POST
。它的主体具有如下语法:
(create-txn)
或
您必须与MKACTIVITY
一起使用的旧样式(如果您使用create txn
而不是create txn with props
,则可以与POST
一起使用)是在事务或工作基线URL上使用PROPPATCH
工作基线URL与MKACTIVITY
一起使用,事务URL与POST一起使用
使用MKACTIVITY
时,必须在根URL上使用PROPFIND
,以获取版本控制配置。然后根据您收到的URL进行签出
,以响应PROPFIND
提供的活动集
href
作为您与MKACTIVITY
一起使用的URL。您将从签出请求中将工作基线URL作为位置
头返回。然后,您可以使用它发布一个PROPPATCH
,以应用修订属性
使用POST
时,您可以从选项
请求响应中的头中获取事务存根,从SVN Txn name
响应中的头中获取事务名称,并针对$transaction\u stub/$transaction\u name
URL执行PROPPATCH
解决这一切的最佳方法可能是设置Subversion服务器,并在通过调试代理服务器(如)运行Subversion时进行一些提交。您可以在svn命令行上使用以下选项强制流量通过代理服务器--config option servers:global:http proxy port=8888--config option servers:global:http proxy host=127.0.0.1
。如果要查看旧协议,可以在http配置中包括SVNAdvertiseV2Protocol off
为了支持范围最广的Subversion服务器,您需要实现HTTPv1协议,该协议具有更多的往返,并且更难实现。如果您只想实现HTTPv2,您将仅限于支持比1.7更新的Subversion服务器。为了以最大的兼容性使用HTTPv2,您必须从选项
响应中检测存在
正如您所见,它变得相当复杂,因此如果您只想实现一些基本功能,那么就不值得尝试编写自己的客户端。实际上,如果他使用MKACTIVITY(这是DeltaV协议的一部分),他并不依赖于自动版本控制。自动版本控制允许不了解DeltaV的DAV客户端能够将更改提交到支持DeltaV(例如Subversion)的服务器。我们最近请求通过自动版本控制来支持设置提交消息。我拒绝了这个请求,因为当一个自动版本控制客户端甚至不知道服务器正在进行版本控制时,它指定提交消息是没有意义的。嗨,Ben,非常感谢你的回复。我很感激你对颠覆的了解。我知道实现subversion的最佳方法是使用像svnkit和javahl这样的现成库。事实上,我们在旧版本中使用svnkit库。但是这个图书馆不是免费的。出于同样的原因,我们正在使用apache webdav jackrabbit库实现功能。我理解您在这里部分提到的内容,如果我没有错的话,我有两个选项来编写日志消息a)使用MKACTIVITY、PROFIND进行签出,签出后我需要使用PROPATCH应用修订道具。b) 与PROPATCH一起使用POST方法。请让我知道我说的对吗?如果我是对的,那么我会选择b)使用POST方法和PROPATCH。我试着在谷歌上搜索这个,但是找不到这个的示例代码。你能给我一些实现这个的示例代码吗?提前感谢我不确定您的要求是什么,但是如果您想支持较旧的Subversion(1.7之前)服务器,您必须支持MKACTIVITY。有很多服务器不支持v2协议。如果你不在乎的话
( create-txn-with-props (PROPNAME PROPVAL [PROPNAME PROPVAL ...])