版本控制系统

“代码”作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储、追踪文件的修改历史,记录多个版本的开发和维护。于是,版本控制系统(Version Control Systems)应运而生,主要分为两类,集中式和分布式。

集中式版本控制系统

集中式版本控制系统的特点是只有一台中央服务器,存放着所有研发数据,而其它客户端机器上保存的是中央服务器最新版本的文件快照,不包括项目文件的变更历史。所以,每个相关人员工作开始前,都需要从这台中央服务器同步最新版本,才能开始工作。

集中式版本控制系统的优点:

1.操作简单,使用没有难度,可轻松上手。

2.文件夹级权限控制,权限控制粒度小。

3.对客户端配置要求不高,无需存储全套代码。

集中式版本控制系统的缺点:

1.网络环境要求高,相关人员必须联网才能工作。

2.中央服务器的单点故障影响全局,如果服务器宕机,所有人都无法工作。

3.中央服务器在没有备份的情况下,磁盘一旦被损坏,将丢失所有数据。

分布式版本控制系统

分布式版本控制系统的特点是每个客户端都是代码仓库的完整镜像,包括项目文件的变更历史。所有数据分布的存储在每个客户端,不存在中央服务器。可能有人会问,我们公司使用Git分布式存储工具,也有“中央服务器”啊?其实,这个所谓的“中央服务器”仅仅是用来方便管理多人协作,任何一台客户端都可以胜任它的工作,它和所有客户端没有本质区别。

分布式版本控制系统的优点:

1.版本库本地化,版本库的完整克隆,包括标签、分支、版本记录等。

2.支持离线提交,适合跨地域协同开发。

3.分支切换快速高效,创建和销毁分支廉价。

分布式版本控制系统的缺点:

1.学习成本高,不容易上手。

2.只能针对整个仓库创建分支,无法根据目录建立层次性的分支。

SVN vs Git

SVN和Git作为集中式和分布式版本控制系统的代表,都有广大的使用群体,两者的优缺点经常被比较。其实,工具对我们来说,就是帮助我们有效提升工作的效率与质量,最适合的就是最好的。我们引用几个开发场景来看看两个版本控制工具的适用范围。

场景一:

公司A,非纯技术开发,项目包含大量媒体设计文件,相关人员只需下载自己关注的部分文件;员工PC电脑配置不高,没有空间拷贝整个项目资料。

适用:SVN

分析:只需公司有一个足够大的服务器硬盘,员工本地只存储自己相关的文件夹,不必下载不想关的媒体文件,避免浪费文件传输时间。

场景二:

公司B,嵌入式底层开发,项目人员较多并且分布在两个城市,代码庞大;用分支管理多机种并行开发,机种间经常相互合并新特性,新patch。

适用:Git

分析:

1.Git有能力高效管理类似Linux内核一样的超大规模项目;

2.Git实现了离线开发、代码审核特性,解决了跨地域协同开发中代码质量和编码协同的问题;

3.分支管理功能强大,便于查询和追溯分支间的提交历史;

4.Git基于DAG(有向非环图)的设计比SVN的线性提交提供更好的合并追踪,避免不必要的冲突,提高工作效率

场景三:

公司C,某行业软件开发,包含敏感重要数据,代码仓库和版本发布权限掌握在客户手中,代码安全要求高,公司开发人员先将代码提交到本地仓库,只有在客户审核通过才能提交到发布仓库。

适用:Git

分析:

1.Git通过哈希加密保证数据的完整性,防止恶意篡改;

2.代码分布存储,异地容灾,保证数据安全;

3.Git支持团队成员自建本地版本库和分支,只有客户发出合并请求,开发人员才能提交代码,客户可以对提交说明、代码规范等方面逐一审核。

总结

不难看出,Git凭借自身的优势,完美解决了大多数公司对版本控制工具的诉求。在当今敏捷开发成为主流,研发周期短,跨地域协同开发多的大形势下,选择Git是大势所趋。也正因为如此,国内外有很多基于Git的云端代码托管服务,目前,作者就正在使用华为软件开发云(https://www.hwclouds.com/devcloud/)配置管理服务托管代码,后面我也会详细介绍它的使用方法。

如何选择版本控制系统 ---为什么选择Git版本控制系统的更多相关文章

  1. git版本控制系统重新认识

    git 版本控制系统 目标:完全搞懂git分布式版本控制系统 搭建git版本控制系统 cvs集中化版本控制系统--集中式管理的服务器 git分布式版本控制系统--会将原始代码仓库镜像下来 新项目使用g ...

  2. Google Code项目代码托管网站上Git版本控制系统使用简明教程

    作为一个著名的在线项目代码托管网站,Google Code目前主要支持三种版本控制系统,分别为Git, Mercurial和 Subversion.Subversion即SVN相信大家都已经熟知了,这 ...

  3. Git版本控制系统之基本使用

    最早是通过接触著名的开源社区Github了解到Git的,但一直没有系统学习过.这次下定决心从头到尾系统的学一学,也将学习过程记录于此,供大家批驳.本篇文章先从以下几个方面简单了解一下Git: Git的 ...

  4. git版本控制系统小白教程(上)

    前言:本文主要介绍git版本控制系统的一些基础使用,适合小白入门,因为内容较多,会分为两部分进行分享. Git介绍 ​ Git是目前世界上最先进的分布式版本控制系统.并且它是一个开源的分布式版本控制系 ...

  5. git版本控制系统小白教程(下)

    前言:本文主要介绍git版本控制系统的一些基础使用,适合小白入门,因为内容较多,会分为两部分进行分享,查看上部请点传送门. 删除文件 ​ git删除文件一般有三种情况,第一种是在工作区修改了文件,但是 ...

  6. 初识git版本控制系统

    当下git分布式版本控制系统越来越火,掌握git也是必须的一个技能.因此,对git做了如下学习. Git初级指南 1. 先安装git.(ps:在select cmponents处要勾选Git Bash ...

  7. git版本控制系统常见操作总结

    简介 Git是强大的版本控制系统,主要功能是针对代码.配置文件等文本进行版本控制.备份等,同时个人认为还是分发代码的一个不错的方式. 常见用法 #创建远程git仓库 [root@test88 ~]# ...

  8. Git学习系列之集中式版本控制系统vs分布式版本控制系统

    不多说,直接上干货! Linus一直痛恨的CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢? 先说集中式版本控制系统,版本库是集中存放在中央 ...

  9. Git版本控制系统VCS

    Git版本控制系统VCS 一.版本控制系统基本情况说明 版本控制是一种记录一个或者若干个文件内容的变化,以便将来查阅特定版本修订情况的系统 1.作用 记录文件的所有历史变化 随时可回复到任何一个历史状 ...

随机推荐

  1. Cassandra存储time series类型数据时的内部数据结构?

        因为我一直想用Cassandra来存储我们的数字电表中的数据,按照之前的文章(getting-started-time-series-data-modeling)的介绍,Cassandra真的 ...

  2. 使用register_shutdown_function触发写日志,使用fastcgi_finish_request提高响应速度

    公司内部的市场管理系统,一直是我一个人维护,最近老是有开发埋怨,内网的账号被人改了密码,账号被解绑了...哈的,错在这还不是一个完整的系统,既没有严格的权限也没有做操作日志呀... 权限现在是准备做在 ...

  3. smokeping安装部署最佳实践

    1.1安装smokeping [root@linux-node2 ~]# cat /etc/redhat-release              #查看服务器信息 CentOS release 6. ...

  4. hiveF 函数解析时间问题

    #!/bin/bashsource /etc/profileupdatetime=`date --date='0 days ago' +"%Y-%m-%d %H:%M:%S"`ec ...

  5. 【Java进阶】——初识数据库连接池

    [简介] 数据库连接池:程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的链接进行申请,使用,释放. 相比之前的程序连接,减少了数据库的打开关闭次数,从而减少了程序响应的 ...

  6. linux之shell编程基本语法

    Shell是用户与内核进行交互操作的一种接口,目前最流行的Shell称为bash Shell.Shell也是一门编程语言<解释型的编程语言>,即shell脚本<就是在用linux的s ...

  7. 模拟退火算法(SA)求解TSP 问题(C语言实现)

    这篇文章是之前写的智能算法(遗传算法(GA).粒子群算法(PSO))的补充.其实代码我老早之前就写完了,今天恰好重新翻到了,就拿出来给大家分享一下,也当是回顾与总结了. 首先介绍一下模拟退火算法(SA ...

  8. 设计模式的征途—3.工厂方法(Factory Method)模式

    上一篇的简单工厂模式虽然简单,但是存在一个很严重的问题:当系统中需要引入新产品时,由于静态工厂方法通过所传入参数的不同来创建不同的产品,这必定要修改工厂类的源代码,将违背开闭原则.如何实现新增新产品而 ...

  9. 学习Sass之安装篇

    Sass是基于ruby开发的,所以想要用Sass要先搭建ruby环境 1 Mac下安装 2 windows下安装 3 下载koala,只需要下载这个软件,其余什么都不需要你安装

  10. 【转载】stm32中断学习

    中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加 ...