Subversion 最佳实践

发表于:2008-05-29来源:作者:点击数: 标签:实践Subversion
这是一套快速入门指南,它可以帮助您在每天的软件 开发 工作中充分使用 Subversion。 使用全面的存储库布局 安排存储库布局的方法有很多。由于分支和标签是普通目录,因此需要在存储库结构中对它们进行说明。 Subversion 项目官方推荐采用“项目根目录”方式

这是一套快速入门指南,它可以帮助您在每天的软件开发工作中充分使用 Subversion。

使用全面的存储库布局

安排存储库布局的方法有很多。由于分支和标签是普通目录,因此需要在存储库结构中对它们进行说明。

Subversion 项目官方推荐采用“项目根目录”方式,项目根目录代表项目的锚点。“项目根目录”包含三个子目录:/trunk、/branches 和 /tags。单一存储库可以只包含一个项目根目录,也可以包含多个项目根目录。

参考书目: “选择存储库布局”。

提交合乎逻辑的更改集

对存储库提交更改时,需确保更改反映单一目的:修复特定错误、添加新功能或一些特殊的任务。您提交的更改将创建一个新的修订号,此修订号可永久作为此更改的“名称”使用。您可将此修订号记载到错误数据库中,或将它用作 svn merge 的参数,这是为了便于今后撤消此更改或将它转移到其它分支中。

参考书目:第 4 章中的“Subversion 和更改集”边栏。

灵活使用事件跟踪工具

尝试尽可能多地在 Subversion 更改集和您的事件跟踪数据库之间创建双向链接:

如果可能,在每个提交日志信息中都引用一个特定事件 ID。 在事件中附加信息时(描述进度,或结束事件),为更改提供相应的修订号。 手动跟踪合并

提交合并的结果时,请务必要撰写说明合并内容的描述性日志信息,类似于:

/branches/foobranch 的修订版本 3490:4120 已合并到 /trunk 中。

参考书目: “手动跟踪合并”和“将整个分支合并到另一个分支中”。

了解混合修订工作副本

工作副本的目录和文件可具有不同的“工作”修订版本:这一特性是特别设计的,目的是允许将旧版本的对象与新版本的对象相混合和匹配。但有一些问题必须注意:

每次执行 svn commit 命令后,工作副本都将具有混合修订版本。刚提交的对象具有最新的修订版本,而其它对象仍为旧的修订版本。 不允许进行的提交包括: 对不具有最新工作修订版本的文件或目录不能提交删除。 对不具有最新工作修订版本的目录不能提交属性更改。 svn update 可将整个工作副本统一为一个工作修订版本,此为上述第 2 点问题的典型解决方案

参考书目: “混合修订版本的限制”。

耐心处理大型文件

Subversion 的另一个不错的功能就是在设计时没有对它可以处理的文件大小进行限制。文件以“流”的形式在 Subversion 客户端和服务器之间双向发送,并且在网络的两端通常占用较少的内存。

当然,还需要考虑大量的实际问题。尽管无需担心 KB 级别的文件(例如,典型的源代码文件),但提交大型文件可能需要花费大量时间和占用大量空间(例如,几十个或几百个 MB 大小的文件)。

开始时,请记住 Subversion 工作副本将所有版本控制文件的原始副本存储在 .svn/text-base/ 区域中。这意味着工作副本占用的磁盘空间至少是原始数据集的两倍。不仅如此,提交文件时,Subversion 客户端还需遵循(现在不可调整)某种算法:

将文件复制到 .svn/tmp/(可能需要花费一定时间,并且暂时占用额外的磁盘空间) 在临时文件和原始副本之间,或者是临时文件和空白文件(如果新添加)之间执行二进制差异操作。(可能会花费很长的时间进行计算,尽管最终只有少量数据会在网络中发送) 将差异发送到服务器中,然后将临时文件移入 .svn/text-base/

因此,尽管理论上对于文件的大小没有限制,您需要知道大型文件可能会需要您在客户端缓慢处理的同时耐心等待。但是,您可以放心的是,与 CVS 不同,这些大型文件不会使服务器出错,或者是影响其他用户。

原文转自:http://www.ltesting.net