vlambda博客
学习文章列表

版本控制系统git和svn的介绍

什么是版本控制系统?

版本控制系统主要用于存储及追踪目录和文件的修改历史,从而有效管理代码。其本质问题是回答“4个W”,即在什么时间(when),什么人(who),修改了什么内容(what),以及为什么修改(why)。

现在版本控制系统已经成为团队共同交付软件过程中所用到的重要协同管理机制,是软件公司的基础设施。其目标是支持软件配置管理活动,追踪和记录多个版本的开发和维护活动。

主流的版本控制系统分为集中式版本控制系统分布式版本控制系统,其中集中式版本管理系统以SVN为主,分布式版本管理系统以git为主。

集中式版本管理系统

集中式版本控制系统的出现,解决了多人如何进行协同修改代码的问题。这类版本控制系统,都有一个单一的集中管理的版本管理服务器,保存所有文件的历史修改版本记录。团队成员之间的代码交换必须通过客户端连接到这台服务器,获取自己需要的文件,每个人如果想获得其他人最新提交的修改记录,就必须从集中式版本控制系统中获得。此时,客户端并没有整个集中式仓库保存的所有内容,而是根据用户的指定命令,一次仅能获取仓库中的某一次代码快照。

当程序员修改了部分代码,但是尚未完成全部工作时,如果希望将这个中间成果保存成临时版本,做个备份时,只有两种选择:一是复制一份到另一个本地目录中;二是直接提交到中央仓库。而直接提交未经质量检测的半成本到中央仓库,可能会影响原有的功能。

集中式版本控制系统两个劣势:

1.在网络不佳的情况下,同步大量文件会经常失败。

2.有单点故障风险,如果svn服务器宕机,那么这时任何人都无法提交代码,也无法从服务器获取文件。

分布式版本管理系统

分布式版本控制系统与集中式版本控制系统的区别在于多个服务器并存,每个人的节点都是一个代码仓库,所有的节点都是平等的。在团队协作过程中,通常会指定某个节点作为团队的中央服务器。

分布式控制系统的特点是:提交的操作都是在本地进行而无需经过服务器,因此提交速度更快。只有需要向他人或远程服务器做文件同步或者提交时,才需要通过网络将其推送到远程仓库或者从远程仓库拉取。因此,即使在没有网络环境的情况下,也可以频繁的提交更新。有了网络环境后再推送到远程的代码仓库。

版本控制系统中的基本概念

代码仓库(codebase):包含一组文件所有历史修改信息的逻辑单位。

分支(branch):对指定的代码基线创建一个副本。

主干(trunch/master):是指一个具有特殊意义的分支,通常在创建代码仓库时,由版本控制系统默认创建,每个代码仓库有且仅有一个这样的分支。

版本号(revision):对应在某个分支上的一次提交操作,是系统产生的一个编号。在svn中是一个连续变化的正整数,在git中是一个md5值。

合入(merge):是指将一个分支所有内容合并到另一个分支,然后被合入的分支便产生一个新的版本号。

冲突(conflict):在合入操作时,两个分支的同一个文件在相同位置上出现不一致的内容,通常需要人工接入,确认如何修改后,方可合入目标分支。