通过本文学习,你可以了解更多Subversion版本升级兼容以及合并跟踪等相关问题,Subversion1.5是以前Subversion发布版本的超集,可以认为是当前“***的”版本。包含所有1.0.x到1.4.x的,以及以前版本没有的修正和特性。所有的新特性将会写入Subversionbook,见svnbook.red-bean.com。
兼容性问题以前的客户端和服务器可以直接与1.5的服务器和客户端交互,然而,如果服务器和客户端不全是1.5时,一些新的1.5特性(例如合并跟踪)将会不可用,而另外一些特性如稀疏检出,在服务器是旧的,客户端是新的时,可以运行但是效率比较低。没有必要转储并重新加载版本库,subversion1.5可以读取以前创建的版本,升级只需用***的库和二进制程序覆盖原来的程序。
Subversion会维护与先前版本API/ABI的兼容,只会增加新的特性,而不会删除旧的特性。根据1.0,1.1,1.2,1.3或1.4的API编写的程序,可以使用1.5的库编译,为1.5编写的程序不必为旧库编译或运行。工作拷贝和版本库格式更改工作拷贝格式已经升级,这意味着1.4和更老的Subversion客户端不能与Subversion1.5的工作拷贝上工作,工作拷贝是自动升级的。类似的,版本库格式也已经改变,意味着直接访问库的1.4以及旧的版本的程序如svnserve,mod_dav_svn,svnadmin等不能读取Subversion1.5的版本库,但是版本库是不能自动升级的。
工作拷贝升级警告:如果一个Subversion1.5客户端遇到了一个1.5以前的工作拷贝,它会在接触到工作拷贝时自动升级工作拷贝格式,并使旧的Subversion客户端不能再读这些工作拷贝了。如果你在机器上使用多个版本的Subversion,请确认你对工作拷贝是用的Subversion版本,防止意外升级工作拷贝。(但是这种自动升级行为不会发生在版本库上,只发生在工作拷。)如果你意外的将工作拷贝从1.4升级到1.5,并希望降级到1.4,可以使用change-svn-wc-format.py,详情看这篇文章,也可以以–help运行来查看使用指导。
版本库升级Subversion1.5服务器可以与1.4和以前的版本库工作,如果不使用svnadminupgrade命令,版本库不会自动升级到1.5。这意味仅仅升级服务器不能直接得到某些特性,你也需要升级版本库。(我们决定不使用自动升级版本库是因为我们不希望subversion1.5偷偷的升级成1.4不可用的版本库。)在运行svnadminupgrade之后,你或许希望对版本库运行svn-populate-node-origins-index程序。Subversion1.5为每个版本库维护了一个节点起源的索引,为了得到一些信息,偶尔构建这个索引。但是对于包含许多修订的老版本库,***一次创建这个索引,使用前面说道的工具,而不会因为自己构建这个索引而影响查询的性能,更多细节见issue#3024。
命令行输出的变更尽管我们希望尽可能让命令行程序的的输出与以前版本保持兼容,但是还是要添加一些信息,这会破坏一些精确依赖输出的脚本。不幸的是,我们不能列出1.5输出的所有改变,但有一条可以确定的是冲突标记的行结束符号会和文件的eol-style匹配。SASL和svn://的兼容性所有1.x的客户端,包含或不包含CyrusSASL支持的,都可以通过在CyrusSASL没有开启时认证正常。注意CRAM-MD5和ANONYMOUS机制是Subversion内置的,所以即使CyrusSASL插件不在,我们也可以使用。没有CyrusSASL支持的1.x客户端不能通过开启CyrusSASL,允许CRAM-MD5和ANONYMOUS机制的1.5+的subversion服务器认证,包含CyrusSASL支持的1.5+客户端可以通过开启SASL功能的1.5+服务器认证,只要保证服务器支持的某个机制客户端也支持。
自定义revprops现在需要通过pre-commit钩子的检验Subversion每个修订版本都有一组关联的修订版本属性;除了标准的日志信息,作者和日志,可以设置任意的用户定义的属性。这些属性本身不是版本化的,所以不能恢复修改的内容。因此,如果我们没有设置pre-revprop-change,我们就不能修改提交修订版本的revprops。在Subversion1.5之前,我们只能在提交时提供这三个标准的revprops;管理员使用钩子来控制这三个标准修订版本属性的内容,需要在pre-commit和pre-revprop-change检查,但是对于自定义的属性,只有pre-revprop-change是相关的。
Subversion1.5版本添加了svncommit包含–with-revprop选项,允许用户在提交时为修订版本指定属性,因此在Subversion1.5允许在没有pre-revprop-change钩子时设置修订版本属性,pre-commit可以在提交之前检查事务修订版本属性(就像许多服务器已经使用pre-commit来检查正确格式化的log)。这意味着如果你以前依赖pre-revprop-changeto钩子控制对于修订版本属性的修改(不仅仅你是跟踪它们的历史),那你先现在也需要在pre-commit添加类似的控制。
新特性合并跟踪(基础)(客户端和服务器)合并跟踪的意思是Subversion版本保持哪些变更从哪里合并过来,这减轻了维护分支的负担,也给了用户一个方式来查询合并的变更—或需要合并的内容—在不同的开发线上。
【编辑推荐】