git--基本知识点--2--.git目录结构

<.git>
COMMIT_EDITMSG  # 最新一次提交的备注信息(并不是HEAD所指备注),git系统不会用到,给用户一个参考
config # 配置文件,项目用户名、邮箱在该文件配置。详解
description # 仓库的描述信息,主要给gitweb等git托管系统使用
FETCH_HEAD # 是一个版本链接,指向着目前已经从远程仓库取下来的分支的末端版本
HEAD # 映射到ref引用,即当前commit对象哈希值。详解
index # 该文件表示暂存区。详解
ORIG_HEAD # 当前commit对象的前一个commit对象hash值,与logs/HEAD文件的最新一行的第一个hash值保持一致。
<hooks> #Git执行特定事件(如commit、push、receive等)后触发运行的一些shell脚本。详解
│ ├applypatch-msg.sample
│ ├commit-msg.sample
│ ├fsmonitor-watchman.sample
│ ├post-update.sample
│ ├pre-applypatch.sample
│ ├pre-commit.sample
│ ├pre-merge-commit.sample
│ ├prepare-commit-msg.sample
│ ├pre-push.sample
│ ├pre-rebase.sample
│ ├pre-receive.sample
│ └update.sample
<info> # 存放仓库的信息
│ └exclude
<logs> # 保存所有更新的引用记录
│ ├HEAD # (切换前的commit对象hash值,切换后的commit对象hash值,切换者,切换者邮箱,切换时间,切换操作信息)详解
│ ├<refs>
│ │ ├stash
│ │ ├<heads> # 所有分支提交信息,保存每个分支的commit对象链详解
│ │ │ ├master # master分支的commit对象链
│ │ │ └testchanges # testchanges分支的commit对象链
<objects> #对象目录,object有:commit、tree、blob、tag
│ ├<08>
│ │ └8aa22897a71f1ff5d34eedd8b30c35997a8ce8
│ ├<0b>
│ │ └20aead00e76e9afc1ee8775b2705c77e790cf6
│ ├<12>
│ │ └d5be03b603f88bc9611979039e58848afa647b
│ ├<14>
│ │ └ed3a8427cc35eec36784d7579db54646b098e9
│ ├<15>
│ │ └aa63597ef2de8f3574b2258a912c8ab63d0694
│ ├<info>
│ └<pack>
<refs> #commit/tree/blob/tag对象的引用
│ ├stash
│ ├<heads> # 当前分支的当前head指针,便于分支切换详解
│ │ ├master # master分支当前head指针
│ │ └testchanges # testchanges分支当前head指针
│ ├<tags> # 保存所有的标签哈希值
│ │ └first # 保存first标签的哈希值
│ │ └fsecond # 保存second标签的哈希值

git是保存文件的完全的副本,而不是差异。

1. HEAD

HEAD文件放着指向当前分支的路径

refs/heads/master文件中放着master分支的当前commit对象hash值

例如:
HEAD内容

  • ref: refs/heads/master

refs/heads/master文件内容

  • b2100018fd07e0d26aecab6ab6c34250e48f0f3a

表示当前在master分支下,且当前commt对象为b2100018fd07e0d26aecab6ab6c34250e48f0f3a

返回目录树index处

2. index

在这里插入图片描述
返回目录树index处

3. logs

3.1logs/HEAD

在这里插入图片描述
对当前commit对象每切换一次,logs/HEAD文件增加一行。切换前后的commit对象可能不属于同一个分支,因为对当前commit对象的切换,可以在同一分支内,也可以跨分支。
返回目录树logs/HEAD>处

3.2 logs/refs/heads/

如: logs/refs/heads/master文件
在这里插入图片描述
在当前分支下,对当前commit对象每切换一次,logs/refs/heads/master文件增加一行。切换前后的commit对象都属于该分支,因为logs/refs/heads下的文件只保存在同一分支下的commit对象切换记录。
返回目录树logs/refs/heads>处

3.3 logs/HEAD文件与logs/refs/heads目录下的文件的异同

共同点:

  • 数据格式都是相同的

不同点:

  • 对于logs/HEAD文件来说,不论跨分支切换commit对象操作还是在同一分支下切换commit对象操作,该文件都会增加一条。但对于logs/refs/目录下的文件来说,在某个分支下切换commit对象时,才会在该文件中增加一条。

总结:
logs/HEAD文件内容的行数 == logs/refs/heads所有文件的行数和 + 跨分支切换commit对象操作的次数。

4. refs/heads

该文件夹下的每一个分支文件,内容始终只有一个commit对象的hash值。保存当前分支的当前head指针(即当前commit对象),目的a分支切换到b分支,保证切换前后的a分支的当前commit状态不变,使得再次切换会a分支时,a分支的当前commit对象仍然是之前的那一个。

如:master→testchanges→master,在两次切换前后refs/heads/master文件内容一直保持未变。
返回目录树<heads>处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值