Subversion 1.6发布说明

来源:百度文库 编辑:神马文学网 时间:2024/06/05 08:37:41
 

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以及旧的版本的工具如svnservemod_dav_svnsvnadmin等不能读取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)

新特性

改进的认证数据处理(客户端)

XXX

在以明文保存密码时会提示

Subversion在以明文保存密码时会提示。

例如:

   $ svn checkout https://www.example.com/repository/trunk repository_trunk
Authentication realm: Example
Password for 'user':
-----------------------------------------------------------------------
ATTENTION! Your password for authentication realm:

Example

can only be stored to disk unencrypted! You are advised to configure
your system so that Subversion can store passwords encrypted, if
possible. See the documentation for details.

You can avoid future appearances of this warning by setting the value
of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
'/home/user/.subversion/servers'.
-----------------------------------------------------------------------
Store password unencrypted (yes/no)?

支持按照KWallet和GNOME Keyring加密方式保存密码(类Unix系统)

密码可以以KWallet (KDE 4)和GNOME Keyring加密方式保存。

支持保存SSL客户端凭证密码短语

SSL客户端凭证密码短语可以通过KWallet, GNOME Keyring, Mac OS Keychain以及Windows CryptoAPI的形式保存,或者是明文形式。

版本库根的相对URL (客户端)

XXX (描述)

   $ svn SUBCOMMAND ^/
$ svn SUBCOMMAND ^/PATH

svn:externals的改进

Subversion 1.6对于svn:externals的使用增加了许多新的特性。包括:

  • 支持文件的svn:externals
  • 在外部定义中支持常见的shell转义规则

支持文件的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)共享
  • FSFS inode打包
  • FSFS版本库:支持Memcached
  • BDB版本库:反向增量

分享多个共有的表示(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选项

添加到svnsvnsync的选项,这样非交互式的操作也可以在未经过权威信任的自签名凭证下工作。

通过这个选项:
   $ svn log -r36364 https://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 https://svn.collab.net/repos/svn/trunk 
Error validating server certificate for 'https://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
(hostname@collab.net)
- 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 中文 发布说明