软件配置管理工具及最佳实践
立即解锁
发布时间: 2025-08-22 00:19:10 阅读量: 2 订阅数: 9 

# 软件配置管理工具及最佳实践
## 1. 多种版本控制系统对比
在软件配置管理领域,有不同的版本控制系统,它们各有特点。MILO 用户可以遍历笔记历史,并根据笔记内容过滤历史记录。DIVA 系统提供了一个追赶功能,允许用户查看历史记录中的文档更改,其用户界面还包含文档更改的动画回放。
Historian 在版本控制方面提供了比 MILO 或 DIVA 更强大的支持,其版本不限于带时间戳的笔记或其他文档附件。Quilt 和 SEPIA 系统专门关注版本控制,Quilt 的版本控制不够全面,需要用户定义协作角色来启用版本控制,而最新的 SEPIA 系统提供了全面的版本控制。与 SEPIA 相比,Historian 更专注于文本文档领域,SEPIA 是一个全面的超文本系统,其版本控制在超文本对象和任务级别支持,但其聚焦检索不如 Historian 具体,因为 Historian 让用户专注于文档的文本内容,而非更通用的超文本对象。
与 Historian 最密切相关的现有系统是 PREP 编辑器,PREP 允许用户在文档组织的常规级别(如句子和段落)关注版本更改,还支持任意版本对之间的灵活比较。Historian 相对于 PREP 的贡献在于全自动版本存档,以及灵活的版本搜索和检索。PREP 的并排比较界面比 Historian 更复杂,但两者传达的基本比较信息相同。Historian 的优势在于可以通过遍历存档历史逐步比较版本。在更广泛的协作工作领域,Historian 系统的整体范围比 PREP 小得多,特别是基于可调参数的作者间通信支持超出了 Historian 系统目前的重点。
## 2. Historian 系统概述
### 2.1 支持的结构粒度
Historian 通过识别和利用文档的层次结构来支持多种结构粒度。文档中最小的版本化项称为信息单元,例如在 C 文件中信息单元是函数,在散文文档中信息单元是段落。较大的版本化项称为复合单元,由零个或多个信息单元组成,在散文文档中,章节是典型的复合单元,章节由节组成,节由段落组成,Historian 版本化的最大复合单元是整个文件。
从版本导航的角度来看,结构细粒度支持可以将搜索聚焦在文档的特定部分。例如,如果用户只对某个函数的演变感兴趣,在文件级别检索版本通常会检索到未显示该函数更改的版本,用户还必须在每个检索到的版本中搜索感兴趣的部分。而通过细粒度支持聚焦搜索该函数,则不会检索到这些不相关的版本。
Historian 实现了如 COOP/Orm 中定义的更改传播,对信息单元的更改也构成了对其所属复合单元的更改,因此所有更改都会反映在不同的结构粒度级别上,用户可以在任何时候(包括在历史搜索过程中)切换粒度视图。例如,一个函数的早期版本可以用于调出整个文件的相应版本。
### 2.2 用户界面
Historian 作为 XEmacs 文本编辑器的扩展实现,以跟踪文档的层次结构及其修改。其用户界面示例如下:
```c
x := y + 2;
}
void foo() {
printf("foo");
}
int selectCanvas() {
int y;
float x;
if ( isActive (x) ) {
x = 22 * x;
}
x = x/y;
return x;
}
void getCommand() {
Version Browser
Per Edit
Per Save
29 /40
7 /10
int selectCanvas(float x, float y) {
if ( isActive (x) ) {
x = 18 * x;
}
x = x/y;
return x;
}
Per Session
3 /7
Per Check - In
/2
Emacs:foo.C
File Edit Historian
Series Go Options
```
左边的窗口是用于修改文件的常规文本编辑窗口,右边的窗口是版本浏览器。文本编辑窗口用于指定在版本浏览器中检索其版本的单元。在这个例子中,正在编辑一个 C 文件,并浏览其一个函数(信息单元)的版本。
### 2.3 版本生成与时间粒度
Historian 在用户修改文件时自动生成版本,为了支持时间细粒度版本控制并保留全面的版本集,它在每次编辑操作时都会生成一个版本,这种粒度可与文本编辑器中多个撤销功能通常支持的更改粒度相比较。
Historian 不是为每个单元只生成一个版本系列,而是生成多个版本系列,每个系列的大小差异很大。只有一个系列包含全面的版本集,其他系列的版本生成频率较低,以此支持多种时间粒度。用户可以通过选择遍历的系列,在对单元历史进行彻底检查和快速浏览搜索之间进行选择。
系列的大小由触发该系列版本保存的用户操作类型控制。例如,有四个系列,每个系列由以下用户操作触发版本保存:
- **Per Edit 系列**:编辑操作。
- **Per Save 系列**:文件保存。
- **Per Session 系列**:文件关闭。
- **Per Check - In 系列**:文件签入。
需要注意的是,只有当单元被修改时才会保存版本。Per Edit 系列通常包含最多的版本,因为编辑操作比文件保存、文件关闭和文件签入更频繁发生;相反,Per Check - In 系列通常包含最少的版本。
在版本浏览器中会显示这四个系列,对于每个系列,会显示当前显示的版本号和系列中的总版本数。可以使用向前和向后箭头按钮按顺序浏览系列,也可以通过点击版本图中的版本框来检索版本。版本图中垂直对齐的版本表示多个系列共享的单个版本。
如果浏览的是整个文件的版本,这四种类型的系列仍然会显示,但它们的大小通常会大得多,因为它们包含了对文件所做的所有更改,这代表了组成该文件的所有信息单元历史的组合。用户可以配置用于特定文件的系列数量和类型,例如,如果不需要时间细粒度版本控制,只需要使用 Per Check - In 系列。
除了上述系列,还有其他选项,如 Per Compile 系列(适用于可编译文档,如 C 文件)和 Marker 系列。Per Compile 系列在文件成功编译时生成版本,遍历这个系列可以确保检索到的每个版本在编译器确保的正确性程度上是正确的。Marker 系列由用户显式生成版本,用于标记被认为重要的特定版本,将版本添加到 Marker 系列可以在未来更快地访问该版本,这是一种用户显式筛选不感兴趣版本的方式,对于快速开发和探索性编程特别有用。
用户可以在搜索过程中的任何时候切换时间粒度。例如,当一个单元的所需版本存在于其历史的早期某个位置,用户希望逐步回溯时间时,可以从最新版本开始,使用箭头按钮,先从粗粒度系列(如 Per Check - In 系列)进行快速浏览,找到所需版本的大致位置后,再切换到细粒度系列进行更彻底的演变检查。
## 3. Historian 技术细节
Historian 的实现与 XEmacs 文本编辑器紧密集成,以支持两种类型的细粒度版本控制。使用 XEmacs 作为基础编辑器便于持续监控对文档所做的更改。结构细粒度版本控制需要维护文件中每个信息单元的边界位置,并了解用户修改了哪些单元;时间细粒度版本控制需要监控用户的操作,并在适当的时候触发修改单元的版本保存。
只有信息单元的版本会被实际保存,复合单元的版本由其信息单元的版本创建。由于更改传播,信息单元的每个更改都会反映在其所属的复合单元中。为了最小化开销和内存
0
0
复制全文
相关推荐










