版本控制系统研究
##################################################################
版本控制
http://baike.baidu.com/view/183136.htm
##################################################################
软件系统的版本号由3部分构成,即主版本号+次版本号+修改号。
主版本号1位,只有当系统在结构和功能上有重大突破改进后才发生变化;
次版本号有2位;
修改号8位,采用提交时的日期。
当系统进行任何修改后,包括数据库结构发生变化,修改号都要随之改变。例如:Ver3.31.19990317
基本概念:
合并
合并是指将某分支上的更改联接到此主干或同为主干的另一个分支。
当对同一文件的不同行进行两组更改时,合并这两组更改很容易,而合并操作也可正常进行。
但对文件的同一行或几行进行更改时,将发生冲突,这就要求有人手动编辑该文件,然后才能将这些更改成功提交到源存储库。
冲突
有时候,当您更新存储库中的文件时,可能会遇到冲突。 当两个或多个用户更改文件中的一些相同行时,将发生冲突。
Hook
Hook 是被存储库事件触发的程序,例如创建新版本或修改无版本属性。
Hook 中保留了足够的信息,可以告知该事件是什么、正被操作的目标是什么,以及触发此事件的人员的用户名是什么。
存储库
Subversion 的核心为存储库。 它是一个存储和共享数据的集中式系统。 存储库以一组树和分支的形式(即目录和文件的层次结构)存储信息。 任何数量的客户端都可以连接到存储库中,并对这些文件进行读取和写入。
########################################################
Mercurial(Hg)分布式版本控制的快速入门
http://www.cnblogs.com/xjimmyshcn/archive/2011/06/17/2083437.html
########################################################
mercurial:善变的, 活泼的, 水银的, [天文]水星的 Mercurial表示墨丘利,墨丘利是罗马神话中为众神传递信息的使者
常见的版本控制软件如svn server(svn),vss administrator(vss),都是需要一个中心服务器的, 但分布式版本控制软件如Mercurial则不需要。
当然,在实际使用中,一般还是要人为的指定一个中心库以作为发布服务器。
分布式最大的好处就是可以离线工作,Mercurial可以直接本地创建资源库,先在本地做提交。待能连中心服务器或者需要时,再提交到中心服务器。
Mercurial的命令行工具是Hg
[作者注释: 以下操作在CentOS 5.6 i386下进行,Mercurial 版本为1.8.4。 Windows下TortoiseHg 版本为2.0.3。]
#################################################################
Mercurial与TortoiseHg使用入门教程
http://www.cnblogs.com/meetrice/archive/2010/07/12/1775707.html
#################################################################
分布式版本管理工具当中,Git和Mercurial(意思为水银的,于是经常缩写为Hg)是最为流行的工具。
大名鼎鼎的Linux就用Git作源码管理, 而Python和Firefox则采用Hg(你可以在这找到一堆使用Hg的项目)。
##################################################################
关于版本控制软件
http://www.cnblogs.com/coderzh/archive/2010/09/29/version-control.html
##################################################################
CVS SVN VSS 使用对比
一、Subversion包含绝大部分CVS功能
二、全局性的版本编号
三、目录的版本控制
四、原子性提交
五、支持变更集的概念 Subversion 将版本管理从单纯的、单个的文件修改的层次通过逻辑上的抽象,上升到更便于理解和交流的开发活动的层次。
六、差异化的二进制文件处理 与CVS 不同,Subversion 采用统一的二进制差异算法(binary differencing algorithm),即对文本文件和二进制文件采用相同的差异比较算法,并以相同的方式在版本库中进行存储:每次提交后版本库中只存储相对于先前版本的 差异,从而可以节省大量的存储空间。
该二进制差异算法不仅应用在版本的存储上,更为重要的是,Subversion 对二进制文件与文本文件一视同仁,当客户端需要获取新的版本时(如执行svn update),在网络上只有版本的差异被传输,从而大大减少对网络带宽的消耗。
七、 双向的差异化-压缩网络传输 Subversion 在客户端获取差异的秘密在于 — Subversion 在客户端的工作拷贝中隐含了每个文件的一个"只读的、干净的"副本(该副本隐藏在隐含目录.svn 里,通常不可见,该副本还有更多的妙用,参见"十二、更多的本地/离线操作"),通过比较用户在客户端的修改和该隐含的副本,Subversion 获取需要真正传送到服务器的差异,并对差异进行压缩后才进行网络传输。
八、高效、快捷创建分支和基线 由于Subversion 的全局版本号特性,Subversion 中分支或基线的创建过程,或Subversion中的"拷贝"过程,真正的操作是在版本库中创建一个到某一全局版本号的指针(pointer),不再需要 针对众多的单个文件依次执行操作。因此,该操作的成本为一个很小的常数,与项目大小,版本库大小,文件数目的多少无关;并且,分支或基线的建立不需要进行 版本的冗余存储,新建立的分支或基线基本不占用版本库空间,分支的后续存储空间的开销也只与修改的大小有关。
九、集成Apache Web Server,提供更多的特性 Subversion 通过与Apache Web Server 的集成,可以提供基于http/https 协议的版本库访问机制,从而支持Subversion 跨越防火墙的安全访问。除此以外,Subversion 还可以利用更多的Apache 特性,包括但不限于:Apache 丰富的用户认证机制(包括通过LDAP服务器如Windows Active Directory 服务器的用户认证),基于目录路径的精细粒度的访问控制,对传输的网络流量进行压缩/解压缩,浏览版本库目录结构等等。
十、支持WebDAV WebDAV(Web-based Distributed Authoring and Versioning)是一种基于 HTTP 1.1 协议的通信协议.它扩展了HTTP 1.1,在GET、POST、HEAD 等几个HTTP 标准方法以外添加了一些新的方法,使应用程序可直接对Web Server 直接读写,并支持写文件锁定(Locking)及解锁(Unlock),还可以支持文件的版本控制。
Subversion 通过与Apache Web Server 的集成,支持WebDAV 协议,使得业务用户(business users)或非技术用户在不安装任何版本管理客户端的情况下轻松访问Subversion 版本库,不改变业务用户已有使用习惯,支持分布的业务用户对文档的评审、修改并实现版本控制,真正将软件开发的生命周期从开发/技术团队扩展到项目的全部 干系人(stakeholder),避免通过电子邮件传递文档的混乱与无序、通过Windows 操作系统共享造成的安全漏洞、病毒攻击、历史版本被覆盖或丢失、审计困难等诸多典型问题。
十一、更好的冲突标识与处理
十二、 更多的本地/离线操作
十三、 对符号链接进行版本管理
十四、 元数据管理
Subversion 元数据的目的是提供附加的信息以满足流程或过程自动化的需要,以增强Subversion 的管理能力和自动化程度。 Subversion 自身就通过"属性"来存储一些特殊的信息。 一个使用Subversion 元数据的例子: 可以在一些批处理的脚本程序或Subversion的钩子程序(hooks)中创建、访问、修改"属性"元数据来满足流程自动化的要求。
##################################################################
软件开发过程自动化(041206)
http://wenku.baidu.com/view/38e89220192e45361066f5d7.html
##################################################################
In Rational suite
Requirement management -> RequisitePro
Change Management -> ClearQuest
Modeling & Code Generation -> Rose Professional
Testing -> TestManager
Configuration Management -> ClearCase