Subversion 1.6发布说明
官方位置为:http://subversion.tigris.org/svn_1.6_releasenotes.zh.html
本文根据原文r36726,由Subversion中文站的中文化翻译小组翻译,欢迎各位参与翻译工作,加入地址:http://code.google.com/p/svncndoc/,参与翻译的志愿者包括rocksun。
Subversion 1.6的新东西
- 改进的认证数据处理
- 版本库根的相对URL
- svn:externals的改进
- 目录树冲突的检测
- 文件系统存储改进
- Ctypes Python绑定
- 改进的交互式冲突解决
- 稀疏目录的排除选项
- svnserve的日志支持
- 察看历史的新HTTP URI语法
- 命令行客户端改进
- API变更、改进以及多种语言绑定
- 超过65项新的bug修正和提升
Subversion 1.6是所有以前Subversion版本的超集,可以认为是当前最好的版本。任何1.0.x到1.5.x的bug修正和特性,都存在于1.6中。新的特性最终会纪录在Subversion图书中(svnbook.red-bean.com)。
本文描述了主要的变更,完整的列表可以看CHANGES的1.6部分。
兼容性情况
以前的客户端和服务器可以直接与1.6的服务器和客户端交互,然而,如果服务器和客户端不全是1.6时,一些新的1.6特性将会不可用。而另外一些特性,在服务器是旧的,客户端是新的时,可以运行但是效率比较低。
没有必要转储并重新加载版本库,subversion 1.6可以读取以前创建的版本,升级只需用最新的库和二进制程序覆盖原来的程序。
Subversion会维护与先前版本API/ABI的兼容,只会增加新的特性,而不会删除旧的特性。根据1.0, 1.1, 1.2, 1.3, 1.4或1.5 的API编写的程序,可以使用1.6的库编译,为1.6编写的程序不一定能为旧库编译或运行。
新特性的兼容性表格
新特性 | Minimum Client1 | Minimum Server | Minimum Repository | 说明 |
---|---|---|---|---|
FSFS Packing | any | 1.6 | 1.6 | |
Tree Conflicts | 1.6 | 1.6 | any | 可以用1.6以前的服务器,但是某些类的冲突将不能检测到。 |
1提醒:在使用file:// 访问方法时,Subversion程序同时是客户端和服务器。 |
工作拷贝和版本库文件系统格式变更
工作拷贝格式已经升级,这意味着1.5和更老的Subversion客户端不能在Subversion 1.6的工作拷贝上工作,工作拷贝是自动升级的。
类似的,版本库文件系统格式也已经改变,意味着那些直接访问库的1.5以及旧的版本的工具如svnserve, mod_dav_svn, svnadmin等不能读取Subversion 1.6的版本库,但是版本库不是自动升级的。
工作拷贝升级
警告:如果一个Subversion 1.6客户端遇到了一个1.6以前的工作拷贝,它会在接触到工作拷贝时自动升级工作拷贝格式,并使旧的Subversion客户端不能再读这些工作拷贝了。如果你在机器上使用多个版本的Subversion,请确认你对工作拷贝使用的subversion版本,防止意外升级工作拷贝。(但是这种“自动升级”行为不会发生在版本库上,只发生在工作拷贝。)
如果你意外的将工作拷贝从1.5升级到1.6,并希望降级到1.5,可以使用change-svn-wc-format.py,详情看这篇FAQ文章,也可以加--help
运行来查看使用指导。
版本库升级
Subversion 1.6服务器可以与1.5和以前的版本库工作,如果不使用svnadmin upgrade
命令,版本库不会自动升级到1.6。这意味仅仅升级服务器不能直接得到某些特性,你也需要升级版本库。(我们决定不使用自动升级版本库,因为我们不希望subversion 1.6偷偷的升级成1.5不可用的版本库,这对于版本库管理来说是一件很慎重的事情。)
命令行输出的变更
尽管我们希望尽可能让命令行程序的的输出与以前版本保持兼容,但是还是要添加一些信息,这会破坏一些精确依赖输出的脚本。
改善的svn proplist --verbose
输出
XXX(r32484): svn proplist --verbose
的输出已经改善。
$ svn proplist --verbose build.conf
Properties on 'build.conf':
svn:eol-style
native
svn:mergeinfo
/trunk/build.conf:1-4800
/branches/a/build.conf:3000-3400
/branches/b/build.conf:3200-3600
$
svn status
的输出发生变化
svn status
增加了第7列输出,用来显示项目是否为目录树冲突的牺牲品,另外还增加了一行,显示目录树中冲突的详细描述。
$ svn status
M Makefile.in
A C src/error.c
> local add, incoming add upon update
M src/log.c
M C src/path.c
> local edit, incoming delete upon update
D C src/properties.c
> local delete, incoming edit upon merge
M C src/time.c
$
钩子变更
pre-lock
中对于输出数据处理的变化
XXX(r32778)
新特性
svn:externals的改进
Subversion 1.6对于svn:externals的使用增加了许多新的特性。包括:
支持文件的svn:externals (客户端)
如果svn:externals的描述指向了一个文件,这个文件会作为版本化条目加入到工作拷贝。
目录和文件外部定义有一些区别。
- 文件外部定义的路径必须是已经检出的,而目录外部定义可以位于任意深度的外部目录,程序会自动创建中间目录,文件外部定义必须位于已经检出的工作拷贝中。
- 文件的外部定义URL的须与其所添加的URL位于相同的版本库;跨版本库的文件外部定义并不支持。
- 提交不会传递到目录外部定义,而包含文件外部定义的目录会提交所有外部文件的修改。
普通版本化文件和外部文件的区别。
- 外部文件不能移动或删除;而应该删除svn:externals属性;然后,外部文件可以被复制。
其他事实。
- 外部文件会在switched状态栏显示X。
在外部定义中支持常见的shell转义规则。(issue 2461,客户端)
XXX: Need to document possible incompatibilies (see this thread
更多阅读
可以看Subversion图书的svn:externals小节。
目录树冲突的检测(客户端)
Subversion 1.6能够识别出一种新的冲突类别,称为“目录树冲突”。这种冲突位于目录结构级别,而不是文件内容。
包括删除本地已经修改的文件,对于本地删除文件的修改。在冲突被标示为解决之前,不能提交目录树冲突的相关文件和目录。
请注意,Subversion一直将重命名处理为“copy+delete”操作,所以文件重命名造成的目录树冲突只能被检测为文件的添加和删除,因此,有可能错报目录树的冲突。
为了利用目录树冲突检测,尝试提交在HEAD修订中已经删除的文件将会报错,在Subversion 1.5中,这被认为是正常的操作,潜在的导致了没有变更的修订版本。
详细阅读
Subversion图书的tree conflicts小节。
文件系统存储改进
Subversion 1.6包含了Berkeley DB和FSFS后端的改进,主要为了改进存储空间,可以显著产生更小的版本库,这些变更包括:
分享多个共有的表示(representations)(issue 2286, 服务器)
当使用多个分支,并在其间合并时,经常会有一些文件的行的历史包含相同的内容,在过去,Subversion会按照前一个版本的增量保存这些文件。Subversion 1.6会使用文件系统中已有的表示来处理重复的存储。根据版本库的大小,以及分支和合并的程度,这样可以节省20%的Berkeley DB版本库,或者15%的FSFS版本库空间。
FSFS版本库: 打包完全的碎片(shards) (服务器)
Subversion 1.5为FSFS版本库引入了将修订版本文件和修订属性文件的碎片(sharded)存放到多个目录。Subversion 1.6将这个概念进一步深入,允许完全粉碎的目录打包成一个文件。通过减少文件系统内部的碎块,打包的FSFS版本库显著的节省了空间,特别是如果包含了很多小的提交。使用一组碎片一个文件的方法,也可以让Subversion减少磁盘I/O的开销,充分挖掘操作系统缓存。
为了打包,可以对版本库运行svnadmin pack
,一旦打包,将没有回到未打包状态的方法,只能通过Subversion 1.6或以后的服务器使用。
FSFS版本库:支持Memcached (服务器)
XXX: Memcached可以为FSFS版本库缓存数据。
额外的构建依赖:APR-Util ≥1.3 || ( APR-Util < 1.3 && APR_Memcache )
BDB版本库:反向增量 (服务器)
XXX
Ctypes Python绑定
Subversion 1.6为Subversion API引入了新的python绑定,新的绑定可以充分利用ctypes库提供的标准API,提供标准Subversion结构的面向对象的接口,这个绑定相比于原来的基于SWIG的绑定有以下优势:
- 自动生成
- 直接,无需特别的“转化”规则
- 完全的python并且跨平台
- 只要程序中使用的方法有兼容的定义,就可以向前后兼容
- 高级的类可以用python化的方法简单的访问subversion功能
构建ctypes绑定会产生两种访问Subversion的方式。第一种是标准API的直接python转移,ctypes提供了一些基本的类型转化,并允许象在C代码中一样调用Subversion功能。新的绑定也引入了一组python类来实现Subversion特性的高级访问,这些类充分利用了python的特性,并尽可能的隐藏了C实现,使得不熟悉C API的python程序员可以简便的使用Subversion。
改进和bug修正
改进的交互式冲突解决(客户端)
dc, mc, tc选项。
这是一个使用命令行客户端的例子:
$ svn up
U Makefile.in
Conflict discovered in 'configure.ac'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: s
(e) edit - change merged file in an editor
(df) diff-full - show all changes made to merged file
(r) resolved - accept merged version of file
(dc) display-conflict - show all conflicts (ignoring merged version)
(mc) mine-conflict - accept my version for all conflicts (same)
(tc) theirs-conflict - accept their version for all conflicts (same)
(mf) mine-full - accept my version of entire file (even non-conflicts)
(tf) theirs-full - accept their version of entire file (same)
(p) postpone - mark the conflict to be resolved later
(l) launch - launch external tool to resolve conflict
(s) show all - show this list
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: mc
G configure.ac
Updated to revision 36666.
$
稀疏目录的排除选项
在Subversion 1.6,svn update
的--set-depth
参数有了新的值—exclude,这个值告诉Subversion忽略工作拷贝中的目标,立刻起作用,直到以后再通知改变。在Subversion 1.6之前,一个目录很难从工作拷贝删除。如果不是借助Subversion命令删除一个目录,它会在下一次svn update
回来。如果通过svn delete
删除这个目录,它会一直在本地被标示为修改。(当然,如果你不小心提交了则另当别论。)1.6中新的排他机制修正了这些问题。
请注意,如果你排除了一个版本化的目录,其中包含了未版本化或本地有修改的文件,Subversion会优雅的处理这种情形,所有的文件都不能安全的删除,Subversion会保留他们,当然也包括所有中间目录。
更多阅读
看这篇博文。
svnserve的日志支持(服务器)
XXX
mod_dav_svn中察看历史的新HTTP URI语法(服务器)
mod_dav_svn现在支持一个新的公共URI语法来检查较早版本的文件和目录。这样可以让用户无需Subversion客户端就可以访问历史,并让第三方工具更加简单(例如代码评审服务),直接与版本库交互而无需svn库。
http://host/repos/path?[p=PEG][&r=REV]
新的语法与svn命令行客户端的语法类似。简单的http://host/repos/path请求获取路径上的HEAD修订版本,而添加“p”查询参数,可以指明另外的peg修订版本,例如:
http://host/repos/path?p=38
...这与在命令行指明“path@38”类似。添加“r”查询参数则类似于命令行中的“-r”选项,让版本库从peg修订版本回溯到较早的操作修订版本:
http://host/repos/path?p=38&r=20
同命令行一样,peg修订版本缺省与HEAD相同,而操作修订版本则默认与peg修订版本相同。在线图书这个小节详细介绍了这些东西。
命令行客户端改进(客户端)
在命令行客户端有太多改进和新选项可以在这里列出来,除了本文已经提到的部分,下面是一些被认为是重要的,但是完整的列表请看CHANGES文件。
日志可以接受多个修订版本
svn log
命令可以在一次调用中接受多个修订版本参数,-c和-r选项都支持。
$ svn log -r36169 -r36171 http://svn.collab.net/repos/svn/
------------------------------------------------------------------------
r36169 | sussman | 2009-02-26 14:46:44 -0800 (Thu, 26 Feb 2009) | 1 line
...log message omitted...
------------------------------------------------------------------------
r36171 | joeswatosh | 2009-02-26 22:05:28 -0800 (Thu, 26 Feb 2009) | 20 lines
...log message omitted...
$ svn log -c36169,36171 http://svn.collab.net/repos/svn/
------------------------------------------------------------------------
r36169 | sussman | 2009-02-26 14:46:44 -0800 (Thu, 26 Feb 2009) | 1 line
...log message omitted...
------------------------------------------------------------------------
r36171 | joeswatosh | 2009-02-26 22:05:28 -0800 (Thu, 26 Feb 2009) | 20 lines
...log message omitted...
--trust-server-cert选项
添加到svn
和svnsync
的选项,这样非交互式的操作也可以在未经过权威信任的自签名凭证下工作。
$ svn log -r36364 http://svn.collab.net/repos/svn/trunk --trust-server-cert --non-interactive没有这个选项:
------------------------------------------------------------------------
r36364 | stylesen | 2009-03-06 13:11:20 +0530 (Fri, 06 Mar 2009) | 3 lines
...log message omitted...
------------------------------------------------------------------------
$ svn log -r36364 http://svn.collab.net/repos/svn/trunk
Error validating server certificate for 'http://svn.collab.net':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: svn.collab.net
- Valid: from Sep 24 22:01:07 2007 GMT until Sep 23 22:01:07 2011 GMT
- Issuer: sv, CollabNet, Brisbane, California, US
([email protected])
- Fingerprint:
AA:5B:74:B1:E2:7F:38:B3:2B:C2:B1:60:6E:01:BB:F5:7C:37:98:46
(R)eject, accept (t)emporarily or accept (p)ermanently? t
------------------------------------------------------------------------
r36364 | stylesen | 2009-03-06 13:11:20 +0530 (Fri, 06 Mar 2009) | 3 lines
...log message omitted...
------------------------------------------------------------------------
API变更、改进以及多种语言绑定 (客户端和服务器)
pre-lock钩子现在可以通过标准输出指明锁定令牌字符串;详细请看r32778。注意,当钩子用了这个特性,必须确保锁定令牌在版本库范围是唯一的。
Subversion 1.6有许多新的修正的API需要列出来,一般的API信息可以看Subversion API,如果你使用Subversion API开发第三方的客户端程序,你可能需要看接口的头文件来查看发生的变更。
一个常见的API变更是以前接受的recurse参数,现在升级为接受depth参数,为了接纳新的稀疏检出特性。
语言绑定几乎已经根据新API更新,尽管可能有些会有滞后。
Bug修正 (客户端和服务器)
大量bug被修正,细节请看CHANGES的1.6.0部分。
Subversion 1.4.x系列不再支持
Subversion 1.4.x线不再支持,这不是意味着1.4的安装已经要完蛋了;如果它工作良好,满足了你的需要,那很好。“不再支持”的意思是我们不再接受1.4.x版本的bug报告,也不会发布任何1.4.x的bug修正版本,除非有绝对安全隐患或数据丢失的bug。
新的依赖:SQLite
我们现在需要SQLite来构建服务器和客户端,我们推荐3.6.11或更新的版本,但是3.4.0已经足够。如果它位于tarball的根下,Subversion会尝试使用SQLite amalgamation,否则Subversion会在系统的常见位置寻找SQLite。你也可以通过传递给configure
命令--with-sqlite
来指明SQLite库或amalgamation的位置。
TAG: Subversion subversion 中文 发布说明
最新评论
删除 引用 scmeye.com (2012-2-29 21:08:06, 评分: 0 )
业内首款完全免费的一站式SVN配置管理平台skyline,有木有!
业内最顶尖的专家视频教程,周周联播,在线答疑,有木有!
有问必答区快速解决你的问题,信不信?试试就知道!
想通过内部推荐渠道入职国内外知名企业,已经不是梦想啦!
www.scmeye.com QQ群:96609693
删除 引用 马丽 (2011-4-12 23:14:53, 评分: 0 )
删除 引用 snowchen (2010-9-24 00:33:07, 评分: 0 )
删除 gemilar (2009-7-16 10:55:24, 评分: 5 )