版本控制系统
安全
“代码”做为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就须要有一款系统,可以存储、追踪文件的修改历史,记录多个版本的开发和维护。因而,版本控制系统(Version Control Systems)应运而生,主要分为两类,集中式和分布式。服务器
集中式版本控制系统网络
集中式版本控制系统的特色是只有一台中央服务器,存放着全部研发数据,而其它客户端机器上保存的是中央服务器最新版本的文件快照,不包括项目文件的变动历史。因此,每一个相关人员工做开始前,都须要从这台中央服务器同步最新版本,才能开始工做。分布式
集中式版本控制系统的优势:工具
1.操做简单,使用没有难度,可轻松上手。学习
2.文件夹级权限控制,权限控制粒度小。编码
3.对客户端配置要求不高,无需存储全套代码。加密
集中式版本控制系统的缺点:设计
1.网络环境要求高,相关人员必须联网才能工做。3d
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的云端代码托管服务,目前,做者就正在使用华为软件开发云(www.hwclouds.com/devcloud/)配置管理服务托管代码,后面我也会详细介绍它的使用方法。