版本控制,通常指的是记录一个项目中各个文件的内容变化,方便项目文件修订版本的查阅和分发,使得多人协作开发更加流畅,提高开发、集成和发布的效率。简单来说,版本控制系统记录了哪些文件被什么人在什么时间修订了什么内容,这在软件开发的过程中非常重要。
01基本开发模式
在接触各种版本控制工具之前,需要首先了解一般软件项目开发的模式,理解trunk、branch和tag等的概念。
不同的版本控制工具尽管管理方式和操作命令不同,但都是服务于软件开发过程,这一过程中对文件版本控制的需求大同小异。
02集中式和分布式
如果你是个人开发者且管理较少的文件,是完全可以建立本地版本控制系统来实现版本管理的目的的。不过,让开发者们可以在不同地方协同工作,可能才是版本控制系统真正体现价值的地方。
按照是否集中管理,可以将现在流行的版本控制方式分为集中式的版本控制系统(CentralizedVersionControlSystems,CVCS)和分布式的版本控制系统(DIstributedVersionControlSystem,DVCS)。当然根据其他分类标准可以有不同的划分方法,但这些都不重要。常见的版本控制工具有:
集中式的版本控制系统:CVS、Subversion(SVN)、Perforce等
分布式的版本控制系统:Git、Mercurial、Bazaar、Darcs等
问题1:什么是集中式的版本控制系统?集中式版本控制,可以简单地理解为使用单一服务器来存放项目文件的版本管理方式。也就是说,所有开发者都是围绕着该单一的中央服务器来进行文件的下载、编辑和提交更新等操作,他们必须通过工具的客户端远程连接到该服务上才能进行操作。
优点:集中式的版本管理不需维护本地数据库,且管理员可以实现对开发者的权限管理,这点很重要。集中式的提交通常具有原子性,即要么不提交要么提交成功,不会因为提交到一半传输中断导致数据库数据损坏。
缺点:集中式的版本控制系统必须联网才能工作,如果没有网,你将无妨访问到该版本库的任何版本信息,也无法将你需要提交的更新及时更新到中央服务器上。单点故障,如果中央服务器挂掉了,那么整个项目的资料都会丢失,剩下的只有每个用户拉取回本地的部分文件,且无法再整合。另外,集中式的分支通常拥有完整的实际文件,会占用较大存储空间,也就是说开辟新分支的代价比较大。
问题2:什么是分布式的版本控制系统?分布式版本控制,也就是没有中央服务器这么一说,开发者在工作时不只是拉取文件,而是把整个版本仓库都下载下来。这样工作的时候不需要联网,开发者相互之间可以单独进行提交更新。
优点:分布式的版本管理不会因为中央服务器的故障而丢失所有数据,只要从任意开发者的本地仓库中恢复即可。分布式的版本管理更加灵活,可以不同的开发者之间进行单独协作开发,有利于基于不同的协作模式来进行项目开发。
缺点:每个开发者在拉取项目工程时,会将整个版本仓库都下载下来,需要占用很大的存储空间。
03版本控制工具的使用
了解版本控制的基本逻辑之后,再去找相应的操作命令,理解起来就比较方便了。
以Git和SVN为例列举常见使用命令(命令的具体使用方法参见参考资料官方文档):
04建议和参考资料
总而言之,开源社区用Git比较多,在企业项目管理中用SVN比较多。至于应该怎么选,除了考虑版本控制工具本身的集中/分布特性,还跟项目管理的方式以及工程师的工作风格有关。如果喜欢自由,那就用Git吧。
转载请注明:http://www.0431gb208.com/sjsbszl/198.html