Git Note#1:Introduction

Git系列学习笔记基于尚硅谷Git及Github教程📒

介绍Git基本结构,Git版本管理及分支管理原理。

目录

简介

两种不同的版本管理工具,历史等在此不做介绍,详见尚硅谷教程视频👈

Git等各类版本控制工具的主要目的即实现项目(代码,文本...)的版本控制,方便管理版本迭代以及团队合作。

版本控制工具

集中式版本控制工具:CVS、*SVN、VSS...

服务器负责保存版本历史信息(集中)。问题:单点故障

分布式版本控制工具:*Git、Mercurial、Bazaar、Darcs...

各客户端维护自己的本地库,存储和控制版本信息(分布)。

Git优势

  • 大部分操作在本地完成,不需要联网
  • 保证完整性(Hash)
  • 尽可能添加数据而不是删除或修改数据
  • 分支操作快捷
  • 全面兼容Linux命令

结构

Git分为本地库和远程库两个部分,大部分文件修改在本地库进行,远程库实现团队协作。

本地库

本地库由客户端进行维护,分为三个区,结构如下:

  • 工作区:文件修改
  • 暂存区:临时存储
  • 本地库:储存历史版本信息

远程库

远程库由代码托管中心进行维护

  • 局域网:GitLab...
  • 外网:GitHub、Gitee...

本地库与远程库的交互结构如下:

  • git push:上传本地库信息到远程库
  • git pull:拉取远程库信息到本地库
  • git clone:拉取远程库信息初始化本地库
  • fork:团队外成员克隆远程库
  • pull request:团队外成员申请拉取远程库修改信息
  • merge:团队内成员审核后合并(或拒绝)申请修改信息

原理

Git底层使用SHA-1哈希算法进行文件和对象表示,每个对象和文件快照都拥有自己的哈希值,也即对象指针(以下哈希值皆用指针说明)。

版本保存机制

  • 集中式版本控制工具:每个版本保存文件增量,拼接原始文件得到最终文件。

  • *Git文件版本保存机制:保存文件快照,不修改则保存指针指向之前的文件,否则新建快照。

Git的文件版本保存结构(快照流)如下:

其中,每个时间点表示一个提交对象,数据结构如下:

  • 提交对象commit:保存文件树对象指针,以及作者等信息
  • 树对象tree:保存各个文件快照的指针

分支管理机制

每个分支拥有一个指针指向所在版本,新建分支并不代表新建版本:

Git使用指针HEAD来选择当前所处的分支和版本,切换版本或分支即移动HEAD指针:

当分支内容各自进展时,创建新的版本并移动分支指针: