http://www.uml.org.cn/pzgl/200903132.asp
1 档案库
所有信息的一个数据库。
前面提到,版本控制系统有一个集中存放档案的地方,这个地方有个正式名称,叫做「档案库(repository)」。档案库里面储存了项目档案的所有历史版本(包括目前开发中的版本),有的版本控制系统是以数据库的方式储存,有的是以档案的方式储存,不论储存的方式为何,对使用者来说,最重要的就是要把档案库放在一台稳定、安全的机器上,并且还要定期备份。
2 工作区
因此,我们会从档案库中取出(复制)一部分自己需要的档案到自己本机的硬盘里,这些存放在本机的档案,就称为本地复本(local copy),而存放本地复本的地方,则称为工作区(workspace)。相对于本地复本,储存在档案库中的版本,则称为主拷贝(master copy)。
对于小型项目而言,本地复本可能就是项目的所有原始码和文件,而大型项目可能会切割成数个子系统或模块,所以开发人员只要取出自己负责的子系统就行了。
工作区有时候也称为工作目录(working directory)或程序代码的工作复本(working copy)。
3 项目、模块、与档案(Projects, Modules, and Files)
最上层的逻辑单位,就是项目(projects),在项目底下又可分成几个模块(modules)以及子模块(submodules),你得为这些模块命名,以便团队成员透过名称来存取它们。例如一个汽车保养场的信息系统,可能会分成进厂维护管理模块、库存零件管理模块、结帐模块...等等,各开发人员只需要取出自己负责的模块就行了。当然,如果你要的话,也可以把整个项目都取回自己的工作区。
4版本
其实版本控制系统在我们每次执行 check in 时,就会把这次存入的档案视为一个新的版本,而每个版本都会记录在档案库里面。也就是说,当你从档案库取出一个档案,修改它,然后存入档案库,在档案库里面就会保留一份原始的版本,以及你修改后的版本(注1)。 每次修改的新版本都会被赋予一个修订版次(revision number),档案的修订版次在每次存入档案库时就会累加。跟版次号码一起储存的 信息可能还包括了档案的修改时间,以及由开发人员额外加注的说明。
5标记(Tags)
前面提过,修订版次(revision numbers)是用来表示个别档案的版本,它会由版本控制系统自动累加,不适合用来表示项目的发行版本。当我们要为项目订一个好记的版本名称时,例如:Pre-Relase2, 应该使用标记(tags)
6 分支(Branches)
分支(branches)的用处就在这里,以上个例子而言,Mary 可以建立一个分支,以继续修改程序上线后的臭虫,而 John 则可以继续维护目前的产品主线。此时 John 和 Mary 都一样可以执行 check in 的动作,只是 Mary 取出和存入的都是档案库中的一个独立分支,跟 Mary 维护的主线是完全分离的。下图描绘了上述的作业方式(取自 [1])。
7 合并(Merging)
当你要 check in 某个档案时,如果档案已经先被其它人修改过并且 check in 了,版本控制系统便会侦测到,并且不允许你 check in 这个档案。此时便需要使用合并(merge)的技术,将两个人修改的内容进行合并,以确保彼此不会相互覆盖,又能保留各自修改的内容。由于两个人修改同一个档案时,通常不会碰巧都修改到相同的部分,因此版本控制系统会帮我们自动完成合并的动作 ;万一两个人修改的部分正好重迭,这种情况称为冲突(conflict),此时就必须由后来 check in 的那个人手动解决冲突的部分(可能会和另一个修改此档案的人讨论为什么会发生这种情况,以及应如何修改)。这部分的处理过程在稍后还会有进一步的讨论。
8 锁定机制(Locking Options)
前面提到过两个人修改同一个档案所造成的冲突,是以合并的技术来解决,不过,各种版本控制系统采用的方式可能不尽相同,其相异之处,基本上只是对于档案锁定(locking)的处理方式不一样而已。锁定机制可分为两种:严格锁定(strict locking)与乐观锁定(optimistic locking)。
9 术语表
英文 中文 说明
check out 取出 从档案库中取出档案。
commit/check in 存入 将档案从本地端存入档案库。
export 汇出 把整个模块从档案库中取出来,取出来的档案不包含版本控制系统的管理档案,也就是汇出的模块将不再由 版本控制系统控管。
import 汇入 把整个目录结构汇入档案库。当你要把一个新的项目放进档案库进行版本控管时,就需要执行这个动作。
local copy 本地复本 放在客户端机器的工作目录中的项目复本。
master copy 主拷贝 放在档案库里的项目复本。
module 模块 一个目录阶层,通常一个项目就是一个模块。
release 发行版本 软件产品的一个版本。为了区别产品的版本以及个别档案的修订版次,因此不使用 version,而用 release。
repository 档案库 存放所有档案(包含历史版本)的地方,客户端执行 check out 时就是从这里取出档案。
revision number 修订版次 一个档案的修改版本,例如:1.1、1.3.2.2。
tag 标记 在开发过程的某个时间点上,为一组档案提供的符号名称。透过 tag 一群档案,你可以很容易在某个 release 里面找出这些档案。
update 更新 从档案库中取得其它人修改的档案,以更新本机的副本(local copy)。
workspace/
working directory 工作区/工作目录 本机的工作目录,又称为沙盒(sandbox)。
1 档案库
所有信息的一个数据库。
前面提到,版本控制系统有一个集中存放档案的地方,这个地方有个正式名称,叫做「档案库(repository)」。档案库里面储存了项目档案的所有历史版本(包括目前开发中的版本),有的版本控制系统是以数据库的方式储存,有的是以档案的方式储存,不论储存的方式为何,对使用者来说,最重要的就是要把档案库放在一台稳定、安全的机器上,并且还要定期备份。
2 工作区
因此,我们会从档案库中取出(复制)一部分自己需要的档案到自己本机的硬盘里,这些存放在本机的档案,就称为本地复本(local copy),而存放本地复本的地方,则称为工作区(workspace)。相对于本地复本,储存在档案库中的版本,则称为主拷贝(master copy)。
对于小型项目而言,本地复本可能就是项目的所有原始码和文件,而大型项目可能会切割成数个子系统或模块,所以开发人员只要取出自己负责的子系统就行了。
工作区有时候也称为工作目录(working directory)或程序代码的工作复本(working copy)。
3 项目、模块、与档案(Projects, Modules, and Files)
最上层的逻辑单位,就是项目(projects),在项目底下又可分成几个模块(modules)以及子模块(submodules),你得为这些模块命名,以便团队成员透过名称来存取它们。例如一个汽车保养场的信息系统,可能会分成进厂维护管理模块、库存零件管理模块、结帐模块...等等,各开发人员只需要取出自己负责的模块就行了。当然,如果你要的话,也可以把整个项目都取回自己的工作区。
4版本
其实版本控制系统在我们每次执行 check in 时,就会把这次存入的档案视为一个新的版本,而每个版本都会记录在档案库里面。也就是说,当你从档案库取出一个档案,修改它,然后存入档案库,在档案库里面就会保留一份原始的版本,以及你修改后的版本(注1)。 每次修改的新版本都会被赋予一个修订版次(revision number),档案的修订版次在每次存入档案库时就会累加。跟版次号码一起储存的 信息可能还包括了档案的修改时间,以及由开发人员额外加注的说明。
5标记(Tags)
前面提过,修订版次(revision numbers)是用来表示个别档案的版本,它会由版本控制系统自动累加,不适合用来表示项目的发行版本。当我们要为项目订一个好记的版本名称时,例如:Pre-Relase2, 应该使用标记(tags)
6 分支(Branches)
分支(branches)的用处就在这里,以上个例子而言,Mary 可以建立一个分支,以继续修改程序上线后的臭虫,而 John 则可以继续维护目前的产品主线。此时 John 和 Mary 都一样可以执行 check in 的动作,只是 Mary 取出和存入的都是档案库中的一个独立分支,跟 Mary 维护的主线是完全分离的。下图描绘了上述的作业方式(取自 [1])。
7 合并(Merging)
当你要 check in 某个档案时,如果档案已经先被其它人修改过并且 check in 了,版本控制系统便会侦测到,并且不允许你 check in 这个档案。此时便需要使用合并(merge)的技术,将两个人修改的内容进行合并,以确保彼此不会相互覆盖,又能保留各自修改的内容。由于两个人修改同一个档案时,通常不会碰巧都修改到相同的部分,因此版本控制系统会帮我们自动完成合并的动作 ;万一两个人修改的部分正好重迭,这种情况称为冲突(conflict),此时就必须由后来 check in 的那个人手动解决冲突的部分(可能会和另一个修改此档案的人讨论为什么会发生这种情况,以及应如何修改)。这部分的处理过程在稍后还会有进一步的讨论。
8 锁定机制(Locking Options)
前面提到过两个人修改同一个档案所造成的冲突,是以合并的技术来解决,不过,各种版本控制系统采用的方式可能不尽相同,其相异之处,基本上只是对于档案锁定(locking)的处理方式不一样而已。锁定机制可分为两种:严格锁定(strict locking)与乐观锁定(optimistic locking)。
9 术语表
英文 中文 说明
check out 取出 从档案库中取出档案。
commit/check in 存入 将档案从本地端存入档案库。
export 汇出 把整个模块从档案库中取出来,取出来的档案不包含版本控制系统的管理档案,也就是汇出的模块将不再由 版本控制系统控管。
import 汇入 把整个目录结构汇入档案库。当你要把一个新的项目放进档案库进行版本控管时,就需要执行这个动作。
local copy 本地复本 放在客户端机器的工作目录中的项目复本。
master copy 主拷贝 放在档案库里的项目复本。
module 模块 一个目录阶层,通常一个项目就是一个模块。
release 发行版本 软件产品的一个版本。为了区别产品的版本以及个别档案的修订版次,因此不使用 version,而用 release。
repository 档案库 存放所有档案(包含历史版本)的地方,客户端执行 check out 时就是从这里取出档案。
revision number 修订版次 一个档案的修改版本,例如:1.1、1.3.2.2。
tag 标记 在开发过程的某个时间点上,为一组档案提供的符号名称。透过 tag 一群档案,你可以很容易在某个 release 里面找出这些档案。
update 更新 从档案库中取得其它人修改的档案,以更新本机的副本(local copy)。
workspace/
working directory 工作区/工作目录 本机的工作目录,又称为沙盒(sandbox)。