Git 学习笔记 | 版本控制和版本控制工具

Git 学习笔记 | 版本控制和版本控制工具

Git 学习笔记 | 版本控制和版本控制工具

学习 git 之前,我们需要先明白一个概念:版本控制!

什么是版本控制?

版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。

需求:

  • 实现跨区域多人协同开发

  • 追踪和记载一个或者多个文件的历史记录

  • 组织和保护你的源代码和文档

  • 统计工作量

  • 并行开发、提高开发效率

  • 跟踪记录整个软件的开发过程

  • 减轻开发人员的负担,节省时间,同时降低人为错误

简单说就是用于管理多人协同开发项目的技术。

没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。

版本管理工具的特性

版本管理工具一般具有如下特性:

  1. 能够记录历史版本,回退历史版本
  2. 团队开发,方便代码合并

版本管理工具的发展简史

主流的版本控制器

主流的版本控制器有如下这些:

  • Git

  • SVN(Subversion)

  • CVS(Concurrent Versions System)

  • VSS(Micorosoft Visual SourceSafe)

  • TFS(Team Foundation Server)

  • Visual Studio Online

版本控制产品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),现在影响力最大且使用最广泛的是Git与SVN。

本地版本控制

记录文件每次的更新,可以对每个版本做一个快照,或是记录补丁文件,适合个人用,如RCS。

工作流程如下:

  1. 从中央服务器远程仓库下载代码
  2. 修改后将代码提交到中央服务器远程仓库

优缺点:

优点:简单,易操作

缺点:所有代码必须放在中央服务器,服务器一旦宕机无法提交代码,即容错性较差,离线无法提交代码,无法及时记录我们的提交行为

SVN流程图:

集中版本控制

所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不连网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且,所有数据都保存在单一的服务器上,有很大的风险这个服务器会损坏,这样就会丢失所有的数据,当然可以定期备份。代表产品:SVN、CVS、VSS。

SVN是集中式版本控制系统,版本库是集中放在中央服务器的。

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。

分布式版本控制

Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS),分为两种类型的仓库:本地仓库和远程仓库。

工作流程如下:

  1. 从远程仓库中克隆或拉取代码到本地仓库(clone/pull)
  2. 从本地进行代码修改
  3. 在提交前先将代码提交到暂存区
  4. 提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库

所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。由于每个用户那里保存的都是所有的版本数据,只要有一个用户的设备没有问题就可以恢复所有的数据,但这增加了本地存储空间的占用。

不会因为服务器损坏或者网络问题,造成不能工作的情况。

Git 流程图:

Git 是目前世界上最先进的分布式版本控制系统。

Git与SVN的主要区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

总结:

  1. svn 是集中式版本控制工具,git 是分布式版本控制工具
  2. svn 不支持离线提交,git 支持离线提交代码
相关推荐
别动我齐刘海10 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
志尊宝11 小时前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
沪上企服通12 小时前
历史账套科目重映射与规则版本重算:旧账梳理的“口径复位”工程
笔记·架构
zttbee13 小时前
git命令
git
gjf05_0513 小时前
人该怎样活着呢?版本75.8
学习
li星野15 小时前
【学习记录】PCB与PCBA核心知识全解析:从设计到制造的关键细节
学习·制造
卿卿的产品经理日记15 小时前
【AI产品经理实战】Day 35|从“沉迷工具“到回归 AI 底层:Skill 收官、系统复盘与下一个 13 天
人工智能·学习·产品经理
一条泥憨鱼16 小时前
【从0开始学习计算机网络】| ARP 协议:地址解析,ARP 欺骗,链路层寻址
网络·后端·学习·计算机网络
HY小宝F16 小时前
树莓派智能摄像头系统 30 天重学计划之 Day 04 · HTTP / API:控制链入口 —— 学习总结
网络协议·学习·http
Go Work17 小时前
2026 Cadence SPB 24.1中文版安装图文详解(附安装包)
经验分享·笔记