HTTP上的Subversion:不再充满失望!

Filed Under (Subversion Server) by rocksun on 12-11-2008

Tagged Under : , ,

转载请注明本文地址:http://www.subversion.org.cn/submerged/?p=64

很多人都知道我的工作是负责Subversion服务器团队的技术领导,是我们更大的开源服务project hosting的一部分。因此,所以我以前的20%项目很自然的可以投入到Subversion本身。

特别的,我现在想去纠正一个几年来一直感到厌恶的错误。Subversion的HTTP协议实在是太复杂和难以理解了,老实说,如果我和Greg Stein都遭到车祸,就没有人能够mod_dav_svn内部的机制。这里有什么幕后故事呢?本质上,我们期望让mod_dav_svn适度实现DeltaV的一个子集,而它是很久以前Clearcase^H^H^H^H在实现通过HTTP进行版本控制的失败规范,8年之后,余下的复杂性还未能带来我们和其他版本控制工具系统协同工作的能力—只是让我们遭受非常令人头痛的维护和性能损害。作为“DeltaV的好居民”,Subversion客户端不允许直接支持在URL中表示修订版本、事务和历史对象等信息。相反,必须愚蠢和不断的发起一系列请求来“发现”不透明的代表这些概念的URL,就好像客户端在做“20 Questions”的游戏,而客户端已经知道了答案。

所以在与Greg Stein和其他人讨论之后,我已经收集了一些让现存协议简化、紧凑和易于理解的想法,也会减少请求数量。你可以阅读我们的正在进行的设计文档,并在[email protected]发送问题和反馈。Subversion计划在年末发布,所以幸运的话我们可以在下个夏天的Subversion 1.7中看到这个新协议。

对于Subversion 1.6来说:一些小的开放已经发生。在新的HTTP开发性的精神中,我们会官方的结束对于通过HTTP“不可以访问老的版本”的宣称,就像在Subversion book所说的:

Q: 可以查看历史修订版本吗?
A: 你的网络浏览器只能说普通的HTTP协议,这意味着只能通过GET获取表示最新版本和目录的公共URL。[...]为了发现文件旧的版本,客户端必须能够根据一定的过程来“发现”正确的URL:这个过程包括发起一系列WebDAV PROPFIND请求,并能理解DeltaV的概念,这通常是你的网络浏览器做不到的。

我们现在要打破这种枷锁!揭露这个谎言!发布这个海怪。在Subversion 1.6中,我们会实现一个访问较早(修订版本,路经)版本的坐标对的官方公共访问语法:

http://host/repos/path?r=REV
http://host/repos/path?p=PEGREV
http://host/repos/path?p=PEGREV&r=REV
 

这个查询语法提供了Subversion命令行客户端中peg修订版本的相同概念,第一个语法意思是“从最新的修订版本中的路经PATH 开始,然后跟着对象回到修订版本REV。”对象曾经改名或在历史中出现在不同的位置也没有问题。第二种语法会没有历史的准确定位一个对象:只是跳到PEGREV,并发现路经PATH。而第三种语法非常类似于运行“svn subcommand -r REV path@PEGREV”:从PEGREV开始,发现路经,然后跟着对象回溯到较老的修订版本REV。

在任何情况下,这意味着源代码浏览器和其他工具不会再使用“秘密的”内部url来访问较早的对象。

原文链接:http://blog.red-bean.com/sussman/?p=139

转载请注明本文地址:http://www.subversion.org.cn/submerged/?p=64

Comments:

One Comment posted for HTTP上的Subversion:不再充满失望!

Make a comment