浅谈版本管理系统

问题

在项目编写中,每个开发人员都需要去开发,维护代码。

初代,使用一个共享文件夹,出现的问题:

  1. 文件锁,张三在修改a.txt,李四也在修改a.txt
  2. 追溯,谁修改了什么,学习,借鉴,检查
  3. 备份,上线项目,A完成了新的功能,需要发布。B维护了代码,但是未完成。

解决问题

经过发展,出现了版本管理系统

完成功能,初版为A,张三修改后,版本为B,李四修改,版本为C

  1. 版本的提交,提交时生成版本号。

  2. 版本的管理,回退到某个版本号,查看某个版本号修改的内容。

  3. 文件冲突合并。

版本控制系统

分为两大类:集中式和分布式

集中式的版本控制系统:SVN,CVS

分布式的版本控制系统:Git,BitKeeper,Mercurial(python实现),GNU Bazaar(python实现)

集中式的版本控制系统

说明:

常用SVN。SVN的服务器是自己搭建的,需要通过在同一局域网下进行使用。

想法:

版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

使用:

小公司,SVN服务器就在局域网内,SVN的确可以在断网(不断局域网)情况下工作。

中大型公司,SVN服务器一般是独立出来的,不在局域网内的,你完成计划的工作内容,需要提交做成一个版本,但是由于版本库是在中央服务器,于是你要等网络联通之后,才可以提交

举例:

  1. 服务器没了,那你丢掉了所有历史信息,因为你的本地只有当前版本以及部分历史信息。

  2. svn像银行,完整账本只有银行有,作为终端节点可以向银行查询账本,但如果某一天银行没了,整个完整账本就没了

    断网的情况下,SVN不工作,既不能提交也不能回滚。

缺点:

  1. 断网情况下,SVN不工作,既不能提交也不能回滚,无法对版本进行管理。
  2. 网速慢的话,可能提交一个10M的文件就需要5分钟

分布式的版本控制系统

说明:

常用Git。GitHub是Git的仓库,通过HTTPS、SSH、GitHub CLI这三种方法进行提交等操作。

想法:

分布式版本控制系统根本没有中央服务器,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。 既然是多人协作,我们肯定是需要指定一个人的电脑作为总仓库,所以人从他的电脑上提交更新,拉取别人的提交,这样才能保证他的仓库保留了所有人的改动。 这个人其实就充当了集中式中的服务器仓库的角色。

举例:

  1. GitHub服务器没了,你不会丢掉任何git历史信息,因为你的本地有完整的版本库信息。你可以把本地的git库重新上传到另外的git服务商。

  2. 比特币的区块链设计就类似git,人手一份全账本,只是用p2p全网同步,而git通常搞个中心化服务来同步

参考

    1. 廖雪峰官方网站——集中式vs分布式
    2. 两张图看懂集中式版本管理系统和分布式管理系统的区别-集中式vs分布式
原文地址:https://www.cnblogs.com/WenzhengLi/p/14272026.html