zoukankan      html  css  js  c++  java
  • 浅谈版本管理系统

    问题

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

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

    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分布式
  • 相关阅读:
    【转载】MFC与ARX结合开发完美的AutoCAD应用程序
    【转载】SDK中调用COM的例子
    Visual Studio 2010 Beta 2 官方下载地址公布
    【转载】WPF中DataTemplate基本原理与缺陷分析
    【转载】曲线打断、求交点
    【转载】MFC单文档视图穷追猛打
    【转载】在对话框中加入属性页
    【项目】08年度科创项目“绘图助手工具箱”项目成果发布
    【项目】ARX程序开发:框裁直线(Rect Trim Line)功能开发
    【转载】ARX程序再VS2002中的调试初探
  • 原文地址:https://www.cnblogs.com/WenzhengLi/p/14272026.html
Copyright © 2011-2022 走看看