版本控制管理


注:本博客里面所有图片都来源网络,如有侵权请联系我删图

什么是版本控制

一种记录代码内容改变的管理方式,文件或者项目可以使用它来回退到某个之前的版本。通过不同版本之间的差异可以知道哪里出了问题、哪里修改过了(还可以确定哪一个人)等

集中式

集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。(联网,中央服务器单点故障风险大)
集中式
这么做最显而易见的缺点是中央服务器的单点故障。 如果宕机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据——包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

分布式

客户端并不只提取最新版本的文件快照, 而是把代码仓库完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 每一次的克隆操作,实际上都是一次对代码仓库的完整备份。
分布式

  1. 不用联网就可以工作,因为每个人的电脑上都是完整的版本库
  2. 修改了某个文件后,你只需要将自己的修改推送给别人就可以了
  3. 很少会直接进行推送修改,而是使用一台充当“中央服务器”的东西。(这个只是方便用来操作交换、修改而已)
  4. 强大的分支管理等功能

Git

手册:https://git-scm.com/book/zh/v2

分布式版本控制系统

  1. 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息;
  2. 权限控制不友好;如果需要对开发者限制各种权限的建议使用SVN。

工作流程如下:
从远程仓库中克隆 Git 资源作为本地仓库;
从本地仓库中checkout代码然后进行代码修改;
在提交本地仓库前先将代码提交到暂存区;
提交修改,提交到本地仓库;本地仓库中保存修改的各个历史版本
在需要和团队成员共享代码时,可以将修改代码push到远程仓库。
git
Index / Stage: 暂存区:用于临时存放你的改动,事实上它只是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做 “索引”

Git 有三种状态,你的文件可能处于其中之一: 已提交(committed)、已修改(modified) 和 已暂存(staged)

  • 已修改表示修改了文件,但还没保存到数据库中。(如果自上次检出后,作了修改但还没有放到暂存区域,就是 已修改 状态)
  • 已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。( 已修改并放入暂存区,就属于 已暂存 状态)
  • 已提交表示数据已经安全地保存在本地数据库中。(Git 目录中保存着特定版本的文件,就属于 已提交 状态)
    在这里插入图片描述

新的git仓库,只有一条时间线,在Git里这个分支叫主分支,即master分支(改名字了叫main)。HEAD指针严格来说不是指向提交,而是指向master,master才是指向提交的。
在这里插入图片描述
创建一个分支很快,除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!
eg:Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上
在这里插入图片描述
新提交一次后,dev指针往前移动一步,而master指针不变
在这里插入图片描述
dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并。
合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后就剩下了一条master分支:
在这里插入图片描述

SVN

集中式版本控制系统

  1. 版本库是集中放在中央服务器的
  2. 需要在自己电脑下拉取中央服务器最新的版本代码,然后干活,干完后,需要把自己做完的活推送到中央服务器。
  3. 集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。

Git和SVN的区别

大部分系统以文件变更列表的方式存储信息,这类系统(svn等)将它们保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异。我们对提交更新一个文件之后,系统记录都会记录这个文件做了哪些更新,**以增量符号Δ(Delta)**表示。
svn
文件的最终版本为:将这些原文件和这些增加进行相加 。
产生的问题:如果增量特别多的时候,得到最终的文件就会耗费时间和性能。

Git采用的是直接记录快照的方式,而非差异比较
Git 更像是把数据看作是对小型文件系统的一系列快照。 在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个 快照流。
git
存储项目随时间改变的快照

  • Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息
  • 要浏览项目的历史,Git 不需外连到服务器去获取历史,然后再显示出来——它只需直接从本地数据库中读取。 你能立即看到项目历史。如果你想查看当前版本与一个月前的版本之间引入的修改, Git 会查找到一个月前的文件做一次本地的差异计算,而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处理。
  • 意味着即使没有网络(坐飞机),也能进行代码的操作,直到有网络连接时再上传
  • Git没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值