版本控制系统¶
理论基础¶
(参见中的概述 项目管理基础设施 )
Version Control 或修订控制是对文档、计算机程序、大型网站和其他信息集合的更改进行管理。受版本控制的文件集保存在 repository .
这个 版本控制系统 (VCS)是负责跟踪存储库的连续版本的应用程序。
如果没有受版本控制的存储库,项目信息很快就会在文件系统和电子邮件附件上分散和复制,从而导致不一致和不可管理。如果再加上清晰的操作程序,VCS可以大大简化对项目文档和源代码更改的管理。
在此项目中,需要版本控制:
管理技术文件(要求、分析、设计、规范和API文件);
管理不同组件的源代码;
管理最终用户文档的制作和翻译。
其他要求包括:
文档和源代码存储库必须在同一个VCS下。
文档和源代码存储库应与项目管理/问题跟踪系统集成。
备选方案分析¶
下表比较了4种与已建立的版本控制产品兼容的版本控制产品 COTS selection constraints :

表图例
特征 |
描述 |
版本库模型 |
在客户机-服务器模型中,用户通过客户机访问主存储库;通常,他们的本地计算机只保存项目树的工作副本。一个工作副本中的更改必须提交到主存储库,然后才能传播给其他用户。在分布式模型中,存储库充当对等方,用户通常拥有一个本地存储库,除了工作副本之外,还具有可用的版本历史记录。 |
并发模式 |
描述如何管理对工作副本的更改,以防止同时编辑在存储库中导致无意义的数据。在锁模型中,在用户请求并从主存储库接收文件的独占锁之前,不允许进行更改。在合并模型中,用户可以自由地编辑文件,但在将其更改检查到存储库中时会收到可能的冲突通知,因此版本控制系统可以合并双方的更改,或者让用户决定何时发生冲突。 |
储存方法 |
描述存储库中存储文件的形式。快照表示提交的文件存储在其整体中,通常是压缩的。在此上下文中,变更集表示提交的文件以不同于前一版本或下一版本的形式存储。 |
变更范围 |
描述是为单个文件还是整个目录树记录更改。 |
修订ID |
在内部用于标识存储库中文件的特定版本。系统可以使用伪随机标识符、修订的内容哈希或具有顺序版本号的文件名。 |
网络协议 |
列出用于同步更改的(安全)协议。 |
用户界面 |
描述是否可以使用Internet浏览器、通过第三方问题跟踪系统或使用命令行(CLI)和第三方图形用户界面(适用于Windows和Linux平台)访问存储库。 |
集成IDE |
列出了允许将VCS与两个通用集成开发环境(IDE)集成的工具示例: Eclipse 和微软 Visual Studio |
原子提交 |
是指保证所有的变更都已作出,或者根本不会作出任何变更。 |
支持合并跟踪功能 |
描述系统是否记住在哪些分支之间合并了哪些更改,并且只合并在将一个分支合并到另一个分支时丢失的更改。 |
文件重命名 |
描述系统是否允许在保留文件的版本历史记录的同时重命名文件。 |
事件挂钩 |
指示在操作(如提交)发生之前或之后触发命令的功能。 |
签署的修订 |
指修订版的集成数字签名,格式如OpenPGP。 |
行尾转换 |
描述系统是否可以调整文本文件的行尾字符,使其与所用操作系统的行尾样式相匹配。 |
Unicode文件名支持 |
指示软件是否支持使用不同字符编码的文件系统下的互操作。 |
资料来源: version control software comparison (改编)
评价
产品之间的主要区别在于集中 (Subversion) 或分布式 (Bazaar, Git, Mercurial) 存储库的性质。分散式系统相对较新(2005年之后),但已获得广泛认可,因为它们允许更灵活的项目组织(例如,为更大的项目做出贡献的较小团队之间的协作),并且不要求每个用户都连接到单个在线存储库。(在互联网或企业内部网上)。分散的系统也可以支持“类似集中”的工作流,只需定义保存“官方”或批准版本的规范(权威)存储库。
从功能上讲,评估中不会出现明确的“赢家”:
所有产品都有在线托管服务(即可以将存储库存储在Web上)。
所有系统都支持安全网络协议,如SSL或HTTPS(除了各种专有协议)。
可以使用各种用户界面:Web界面(包括与问题跟踪系统(如Redmine或Trac)的集成)、类似于bash的命令行界面(CLI)和各种本机或第三方图形用户界面(GUI)。
出于软件开发目的,所有版本控制系统都可以使用插件耦合到集成开发环境(IDE)。下面列出了两个常见的多语言IDE的示例: Eclipse 和微软 Visual Studio .
产品之间的主要特性是相似的(尽管命令和典型的工作流都不是)。
最后的选择是通过评估软件在实际开发项目中的采用情况来进行的。
真实世界的使用¶
开发人员社区活动的基本信息可通过以下方式获得 Ohloh indicators on version control systems .
使用一个简单的标准评估软件采用情况:
对于这个项目,不同的开源COTS所使用的版本控制系统是什么?

类似的一般趋势在 results of the Eclipse Community Survey 2012 .
结论
根据软件采用结果, Git 显然是推荐的版本控制系统。