【git】git的内部原理
参考文章:https://zhuanlan.zhihu.com/p/96631135
参考文章:https://marklodato.github.io/visual-git-guide/index-zh-cn.html
PART 1 git内部存储信息的方式
在.git/objects里面有几种objects
blob: 节点,只储存文件内容,不包含文件名信息,在add之后就会存在,对象文件名是SHA值。
tree: 树,当前目录结构的快照,每一个文件 / 文件夹 的 权限 / 类型 / SHA值 / 文件名。
commit: 提交,tree的SHA值,上一个提交的SHA值,提交的作者和具体时间,提交的信息
分支信息位置
cat .git/HEAD
cat .git/refs/heads/master 会指向一个提交对象
PART 2 三个分区如何变更
三分区:
工作目录: working deriectory: 操作系统上的文件
索引 / 暂存区:Index / stage: 存着一个索引,这个索引可以认为是一个tree,而储存下来的tree对象是该索引的快照。在.git/index 文件中保存。
仓库:repository: 记录每一次提交
之间相互转换的关系:
git add:建立blob对象,更新索引(将文件指向新的对象)
git commit: 根据当前索引生成一个tree对象,创建一个新的commit对象,由之前的commit对象生成,组成一条变更历史。
Q & A
Q:git储存的是文件快照还是变更部分?
A:文件快照。哪怕修改一点也是全新的一个blob。checkout commit很方便,
另外git还有垃圾回收机制,会清楚无用的object, 还会把相似的打包压缩。
Q:git checkout到底是啥意思?
A:有两种用法:
git checkout sth: 切换分支,把HEAD指向某个commit对象,这个commit对象可以是SHA值确定的,也可以是分支确定的,
eg. git checkout HEAD^ 切换到当前HEAD的上一个提交
git checkout 244006 切换到SHA为244006的commit对象
git checkout master 切换到master分支对应的提交
git checkout sth somefile: 并不切换HEAD的指向,而只是把某个文件恢复到某个状态。
Q:git reset是啥意思?
A:将当前的分支指向另一个提交。
【git】git的内部原理的更多相关文章
- Git详解之九:Git内部原理
Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的, ...
- git内部原理
Git 内部原理 无论是从之前的章节直接跳到本章,还是读完了其余章节一直到这——你都将在本章见识到 Git 的内部工作原理 和实现方式. 我们发现学习这部分内容对于理解 Git 的用途和强大至关重要. ...
- Git详解之九 Git内部原理
以下内容转载自:http://www.open-open.com/lib/view/open1328070620202.html Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各 ...
- git内部原理-第一篇
本人计划写一些关于<git内部原理>的文章 计划每周一篇
- Git 内部原理 - (7)维护与数据恢复 (8) 环境变量 (9)总结
维护与数据恢复 有的时候,你需要对仓库进行清理 - 使它的结构变得更紧凑,或是对导入的仓库进行清理,或是恢复丢失的内容. 这个小节将会介绍这些情况中的一部分. 维护 Git 会不定时地自动运行一个叫做 ...
- Git 内部原理--初探 .git
说到Git大家应该都非常熟悉,几乎每天都会用到它.在日常使用过程中,我们貌似并不需要关注其内部的原理,只需要记住那几个常用的命令,就可以说自己是会Git的人了.可是,事实真的是这样子的吗?今天我们就来 ...
- Git内部原理浅析
Git独特之处 Git是一个分布式版本控制系统,首先分布式意味着Git不仅仅在服务端有远程仓库,同时会在本地也保留一个完整的本地仓库(.git/文件夹),这种分布式让Git拥有下面几个特点: 1.直接 ...
- Git详解之内部原理
前言 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的,不过也有人认 ...
- Git内部原理探索
目录 前言 Git分区 .git版本库里的文件/目录是干什么的 Git是如何存储文件信息的 当我们执行git add.git commit时,Git背后做了什么 Git分支的本质是什么 HEAD引用 ...
- Git内部原理(1)
Git本质上是一套内容寻址文件系统,在此之上提供了VCS的用户界面. Git底层命令(plumbing) vs 高层命令(porcelain) Git的高层命令包括checkout.branch.re ...
随机推荐
- 【ngx-ueditor】百度编辑器按下Shift键不触发contentChange事件
背景:基于Angular 6,引入ngx-ueditor 发现现象:如果以Shift键+任意键结尾,则ngModel会丢失包含shift键的字符 例如:输入“ABC+AB++++”,则ngModel中 ...
- Ionic4 入门
1.搭建环境 1.电脑安装node.js,安装后电脑会自动安装npm 2.通过cmd命令,安装cnpm npm install -g cnpm -registry=https://regist ...
- appium常见问题09_MAC打开uiautimatorviewer闪退怎么办?
问题: 下载安装Android SDK后,并且已在.bash_profile文件中配置环境变量.但是在tools中打开定位工具uiautomatorviewer出现闪退. 解决: 首先检查环境变量配置 ...
- ubuntu snap 包管理器
基本使用 snap find $package snap install $package [--channel=beta] snap list snap refresh $package [--ch ...
- python 装饰器 对类和函数的装饰
#装饰器:对类或者函数进行功能的扩展 很多需要缩进的没有进行缩进'''#第一步:基本函数def laxi(): print('拉屎')#调用函数laxi()laxi() print('======= ...
- ThreadLocal相关
转自:http://blog.csdn.net/lufeng20/article/details/24314381 ThreadLocal是什么 早在JDK 1.2的版本中就提供Java.lang.T ...
- bash 中的特殊变量
bash 中的特殊变量 变量 说明 ------------------------------------ $0 当前脚本的文件名 $n 第n个位置参数 $* 传递给脚本或函数的所有参数,$*会将这 ...
- sublime中使用插件anaconda而在代码中出现方框
这个标志是说不符合PEP8标准,比如使用了Tab做缩进:一行过长等问题. 可以在可以在 Sublime > Preferences > Package Settings > Anac ...
- iview 分割面板效果(一)基本原理
方法一: 基本点就是:利用“子绝父相(子元素相对于父元素进行定位)”, 左侧的pane设置为left:0;right:a%, 则右侧的设置为right:0;left:(100-a)%. 如果左右之间有 ...
- HTML 使用CSS 如何去掉文本聚焦框 HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input、textarea输入框placeholder样式
HTML 使用CSS 如何去掉文本聚焦框 : outline 值设为none 修改input.textarea输入框placeholder样式 兼容性代码: input::-webkit-input ...