版本控制系统的发展

单人开发

  1. 写代码;
  2. 使用cp命令进行对已写内容备份;
  3. vi创建log文件记录代码变更;
  4. 一个版本要发布时,使用tar命令将所有文件打包归档。
版本控制系统的发展_第1张图片
image.png

多人合作开发

  1. 多个程序员开发一个项目,各自完成代码;
  2. 将改动的文件统一发送给负责人;
  3. 由负责人统一将代码进行合并。
版本控制系统的发展_第2张图片
image.png

举例:补丁文件

版本控制系统的发展_第3张图片
image.png

RCS

代码提交步骤:

  1. 检出文件(co);
  2. 对文件进行编写;
  3. commit文件(文件生成新的版本);
  4. 检入文件(ci)。

缺点:

互斥写入机制。一个程序员检出文件编写时,其他人不可以进行操作。

版本控制系统的发展_第4张图片
image.png

回退历史版本:

  1. RCS给每个文件创建了一个追踪文档(后缀,v)来记录版本历史。
  2. 在最新文档内容的基础上,减去历史上发生的改变,就可以恢复到之前的历史版本。这样,RCS就实现了备份历史和记录改变的功能。


    版本控制系统的发展_第5张图片
    image.png

    版本控制系统的发展_第6张图片
    image.png

CVS

特点:

  1. 引进分支概念;
  2. 引进库概念,文件构成一个库。
  3. 采用“复制-修改-合并“模式。 使用,v文件记录改变。

代码提交步骤:

  1. 从主干创建分支,分支是主干文件在本地复制的副本;
  2. 在本地进行修改,在分支提交文件修改,文件生成不同的版本;
  3. 分支工作结束后,将分支合并到主干;
  4. 使用tag记录待发版文件集合,进行发版。 如:tag v1.0 (file1:r1.3) (file2:r1.1) (file3:r1.5)
版本控制系统的发展_第7张图片
image.png

回退到历史版本

r1.0 = r2.0 - change(rb1.0.2 - rb1.0.1) - change(rb1.0.1-r1.0)

版本控制系统的发展_第8张图片
image.png

SVN

特点:

  1. 合并是原子操作;
  2. 支持管理Binary和Unicode文件;
  3. 采用关系型数据库来存储改变集
  4. svn中的版本是针对整个文件系统的(包含多个文件以及文件组织方式),每次commit生成一个整个项目文件系统树的新版本。
  5. 不会从库下载整个主干到本地,而只是下载主干的最新版本。
版本控制系统的发展_第9张图片
image.png

代码提交步骤:

  1. 从分支/主干下载最新版本代码;
  2. 在本地进行修改; 将修改提交到本地分支;
  3. 分支合并到主线。

回退历史版本原理与CVS相同

GIT

特点:

  1. git会保存blob(文件), tree(文件夹), commit和tag四种对象
  2. commit对象包含:文件系统树的快照、修改人、修改时间、附加消息、指向它的父对象的指针。
  3. 一个tag对象包含有tag的名字,和指向一个commit对象的指针。
版本控制系统的发展_第10张图片
image.png
版本控制系统的发展_第11张图片
image.png

代码提交步骤:

  1. clone代码库到本地分支;
  2. 在本地进行修改,add命令将修改的内容添加到缓存,并每一个文件计算校验和(哈希码);
  3. commit命令将当前版本的文件快照保存到 Git 仓库中;
  4. 最终将校验和加入到暂存区域等待提交分支合并到主线。
版本控制系统的发展_第12张图片
image.png

回退到历史版本:

根据commit里的父级指针回退

你可能感兴趣的:(版本控制系统的发展)