git的工作原理

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容