美文网首页
git的工作原理

git的工作原理

作者: 木扬音 | 来源:发表于2021-04-11 21:41 被阅读0次

1、git操作说明

git操作说明
  • 1、commit:对当前操作目录、资源文件、代码等的一个快照
  • 2、diff:commit与commit之间的差异
  • 3、branch:分支--在一个commit之间进行分开的时候
  • 4、merge:合并--两个commit合并到一起
  • repository:仓库--记录上面四个操作的过程叫仓库

Git与SVN的差别

svn存储的是diff,这就意味着我们在当前commit下,想要回到之前指定的某个commit,只能一个一个进行回撤
git存储的是整个快照commit,如果我们不对.git文件进行处理,会导致.git文件越来越大

git工作流程

git工作流程

我们平时都是在workspace工作区中,然后通过git add提交到Index\Stage索引区、暂存区,再通过git commit提交到Repository仓库,仓库再通过git push到远程仓库,远程仓库再通过pull或者fetch/clone -- > checkout到本地仓库

git命令工作流程

git reset与git checkout命令

HEAD

HEAD是用来指向分支的最后一次提交
git reset:回退版本,可以指定退回到某次提交的版本
git reset --soft HEAD~1:回退到上次提交的暂存区,不会改变当前工作区
git reset HEAD .:移除当前暂存区文件
git reset --hard HEAD~1:回退到上次提交的工作目录,会改变当前工作区
git checkout master:切换到master分支
git checkout -- .:重新存储工作区文件到暂存区

Git key-value⽂件系统

我们在使用Git时会发现无法提交空目录,那是因为在Git中是没有目录的概念,只有文件,使用过保存路径来对应相应的文件
如果我们想提交一个空目录,那我们可以在目录下创建.gitkeep或者.keep文件,然后在项目的.gitignore中设置不忽略.gitkeep

我们在提交修改commit的时候,git会根据本次提交修改的文件的哈希值Key,修改的文件的压缩版本为Value,通过树结构来存储提交

Git Key-value

git hash-object:计算文件的哈希值作为key存到系统里,文件内容作为value存放到.git目录
git update-index:将文件计算出来的哈希值存储到暂存区
git write-tree:将暂存区的内容生成树结构(本质上也是个哈希值),然后将树结构提交到commit tree

commit

.git目录会存储每次文件修改的压缩版本和每次提交的commit信息的压缩版本

Git对象存储

Git将存储对象的40位HASH分为两部分:

    1. 头两位作为⽂件夹
    1. 后38位作为对象⽂件名 .git/objects/hash[:2]/hash[2:40]

为什么要这么设计⽬录结构,⽽不直接使⽤40位hash作为⽂件名?

    1. 部分⽂件系统对⽬录下的⽂件数量有限制。例如,FAT32限制单⽬录下的最⼤⽂件数量是65535个。
    1. 部分⽂件系统查找⽂件属于线性查找,⽬录下的⽂件越多,访问越慢。

git init后的.git文件目录如下图所示

git init后的.git文件
git add ..git文件目录如下图所示
git add .
git cat-file -p打印哈希值对应的信息
git cat-file -p 哈希值对应的信息 文件信息

Git index⽂件

Git在 .git ⽂件夹下⾯存放了 index ⽂件,该⽂件表示Git stage 的内
容。该⽂件是⼆进制⽂件,保存了被stage的⽂件的所有信息,像inode信息、hash值等等

git status
index文件

hexdump

hexdump命令查看index文件二进制数据信息

index二进制数据信息
index二进制数据信息搜索4f

git ls-files -s

git ls-files -s 查看暂存区的文件具体信息
100644对应的是⼀个mode值,代表普通⽂件。在Git⾥,⼏个常⽤的mode值包括:

  • 100644 - 普通⽂件;
  • 100755 - 可执⾏⽂件;
  • 120000 - 符号链接(symbolic link);
  • 040000 - ⽬录;
git ls-files -s

git hash-object

git hash-object:计算⼀个⽂件的git对象ID,即SHA1的哈希值
git hash-object -w:将指定对象(哈希值)写⼊数据库
当文件内容没有改变,对应的哈希值不会改变

git hash-object

git update-index

git update-index:将⼯作⽬录的⽂件加⼊索引/暂存区域

git update-index

git write-tree

git write-tree:生成文件树,本质也是个哈希值,也是存放在.git/objects目录下

git write-tree

git read-tree

git read-tree :将给出的树写⼊索引但不写⼊暂存

git read-tree

git commit-tree

git commit-tree:将给出的树提交到仓库

远程仓库

创建一个仓库,就可以提交代码到该仓库

git init --bare

初始化git环境

git init

添加一个远程仓库,可以添加多个remote

git remote add
添加远程仓库

拉取远程代码合并到本地仓库

git pull
拉取代码

提交本地代码到远程仓库

git push --set upstream origin master
提交代码

当远程的master没有新的commit的时候,会将新提交的commit放到master分支最后,如果有新的commit会快速合并失败报错

快速合并

git mergetool打开图形界面,解决合并冲突

git rebase并不是创建一个新的commit,而是将指定的一个分支放到另一个分支的结尾

git rebase origin/master

相关文章

  • git的工作原理

    git的工作原理

  • git

    Git Git安装官网下载Git Git工作原理(图)imageWorkspace:工作区 (目录)Index /...

  • Git

    Git Git安装官网下载Git Git工作原理(图)imageWorkspace:工作区 (目录)Index /...

  • Git

    Git 1、Git安装 官方下载Git 2、Git工作原理(图) Workspace:工作区 (目录)Index ...

  • Git 使用指南

    [TOC] Git @(24.1 Git)[git] 工作原理 直接记录快照,而非差异比较Git 只关心文件数据的...

  • git工作原理

    直接记录快照,而非差异比较 Git 和其它版本控制系统的主要差别在于 Git 对待数据的方法,其它大部分系统以文件...

  • Git工作原理

    按照官方文档的描述,Git是这样定义的 内容寻址(content-addressable)文件系统,在此之上提供了...

  • git的工作原理

    1、git操作说明 1、commit:对当前操作目录、资源文件、代码等的一个快照 2、diff:commit与co...

  • 图形化界面TortoiseGit的使用

    git工作原理如下图:git工作原理.jpg 首先在GitHub上创建一个新的库,如下图:创建库.jpg 新建一个...

  • GIT常用命令总结(持续更新中...)

    git工作原理 通过上图大概可以看出git的工作原理: 本地工作区:随意的一个文件都可以被认为是工作区,一般来说指...

网友评论

      本文标题:git的工作原理

      本文链接:https://www.haomeiwen.com/subject/ltzakltx.html