Git Note#1:Introduction
Git系列学习笔记基于尚硅谷Git及Github教程📒
介绍Git基本结构,Git版本管理及分支管理原理。
目录
- Introduction👈
- Command
简介
两种不同的版本管理工具,历史等在此不做介绍,详见尚硅谷教程视频👈
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
指针:
当分支内容各自进展时,创建新的版本并移动分支指针: