版本控制
一个完整大型项目的构建与开发,都是需要一个团队合作完成的,每个人分工不同。同时,每个人负责的岗位也会被其他人替代,在项目开发人员更新迭代的同时,为了确保整个项目中以往开发人员遗留的代码所使用的第三方库,框架与刚上岗的开发人员所写的代码用到的第三方库、框架能够在整个团队中得到同步,避免新代码所使用的版本不同而导致整个项目存在代码版本不同的隐患差异,便出现了对整个项目的软件进行统一版本控制的设计思想。
版本控制指的是在一个项目开发中,用于从项目构建到项目开发为止的整个项目维护过程中的一种标准维护作法。
它是一种软件工程设计技巧,能够借此在软件开发过程中,确保由不同人所编辑的同一代码文件都得到同步。
项目的版本控制其实是使用一种工具,来记录与追踪项目整个开发过程中所使用到的软件,库等的版本信息,并进行统一管理。无论是个人的文件或代码管理,还是企业中的团队协作开发,版本控制工具都是必不可少的利器。
发展历程
在早期,最原始的版本控制系统是纯手工控制,修改文件或者保存文件副本,是使用 U盘或其他方式 来保存开发人员所写的代码文件,并导出拷贝到其他开发人员的计算机中。
比如修改一个文件从 version1 到 version2 ,如果只改动一次还好,我们知道修改了什么,但是当 version2 修改到 version3 甚至 version4 的时候,这种方式安全隐患很大,且不易于项目维护。
由于版本改动较大,我们想知道相对于上一个版本到底做了什么修改的话比较困难,回滚版本的时候也很容易出错,便出现了由软件工具系统来进行统一管理
现如今,通过在整个项目的中央服务器中使用第三方专门的软件工具来设立一个版本控制系统,能有效记录所有代码文件的版本,追踪代码文件的变化,同时很容易就回滚到之前某个版本的状态。
版本控制软件的发展
版本控制系统所使用到的软件工具也会其发展的历程:
最开始,使用的是 CVS (Concurrent Versions System)
软件工具。
CVS
:
CVS
是最早的开源且免费的集中式版本控制系统。部分收费。
SVN
:
不过由于CVS
自身设计的问题,会造成提交文件不完整,版本库莫名其妙损坏的情况。
同样是开源而且免费的SVN
修正了CVS
的一-些稳定性问题
目前用得最多的集中式版本库控制系统。
GIT
:
傻瓜内容跟踪器。
一款免费、开源的分布式版本控制系统,用于敏捷、高效地处理任何小、大型项目
历程如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q1zZEdms-1657784817359)(git-media/版本控制系统的发展历史.webp)]
版本控制工具的主要作用 是:
- 备份文件:在服务器中保存代码,方便随时恢复
- 记录历史:追溯任意代码文件中的任意一行在什么时间被什么人修改过
- 回到过去:让版本库中的任意一个代码文件恢复到之前的任意一个历史版本
- 多端共享:多个终端共享同一份代码
- 团队协作:方便团队协作开发,尽可能减少代码不一致的冲突情况
集中式
版本库是集中放置在中央服务器的,开发过程中,需要先从中央服务器取得最新的版本,修改代码后再将代码文件推送给中央服务器。例如 : SVN
集中式特点在于必须要有中央服务器,且使用过程中必须联网才能完成版本控制操作。一旦中央服务器挂掉或者数据丢失,则会影响整个开发工作。
所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS。
过程如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Y3ItD8Q-1657784817361)(git-media/集中式.webp)]
分布式
分布式版本控制抛开了中央服务器的概念,每台主机都是一个完整的版本库,使用过程可以不联网。
使用过程中,多人协作可以通过相互推送自己修改的代码给对方【通常不这么干】。因为双方不一定在局域网内且未必能正常接收。为了方便操作,分布式版本控制系统通常也有一台充当“中央服务器” 的电脑,但这个服务器的作用仅仅是为了方便 “交换” 大家各自修改的代码文件。
所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。
不会因为服务器损坏或者网络问题,造成不能工作的情况!
过程如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2wbCJwT-1657784817362)(git-media/分布式.webp)]
主要区别
分布式相对于集中式的最大区别就在于:
- 开发者可以提交到本地,每个开发者机器上都是一个完整的数据库。
SVN
: 版本集中管理,所有的代码都在中央服务器上。
Git
: 去中心化,每台服务器上都有一个完整的数据库。
区别如图: