如何选择版本控制系统 ---为什么选择Git版本控制系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何选择版本控制系统 ---为什么选择Git版本控制系统相关的知识,希望对你有一定的参考价值。

版本控制系统

“代码”作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决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版本控制系统的主要内容,如果未能解决你的问题,请参考以下文章

如何删除系统镜像中的自带软件

企业里没有TPM(可信赖平台模块)标准的安全芯片计算机,如何开启BitLocker锁定磁盘,如何备份系统,当系统出现问题又如何恢复,快速恢复又兼顾系统安全

如何清除python控制台

如何让控制器等待服务返回值以及如何访问控制器中的返回值?

如何获取本机系统调用地址

如何在Ubuntu系统安装FFmpeg