【Git】04 .git目录



一、.git目录

ls -a .git/

./   COMMIT_EDITMSG  description  hooks/  info/  objects/
../  config          HEAD         index   logs/  refs/

二、切换分支

cat .git/HEAD                 # 通过HEAD指针,查看当前分支为master
ref: refs/heads/master

git checkout -b temp          # 新建temp分支,同时切换到该分支上
Switched to a new branch 'temp'

cat .git/HEAD                 # 查看当前分支,已变成temp
ref: refs/heads/temp

git checkout master           # 切换到master分支
Switched to branch 'master'

cat .git/HEAD                 # 分支切换后,HEAD又发生了变化
ref: refs/heads/master

三、仓库配置信息

在仓库配置本地用户名和邮件,配置信息是写入到.git/config文件中的。

> git config --local user.name tom
> git config --local user.email tom@123.com

> cat .git/config
[core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
[gui]
        wmstate = normal
        geometry = 841x483+463+62 189 218
[user]
        name = tom
        email = tom@123.com

> git config --list --local
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
gui.wmstate=normal
gui.geometry=841x483+463+62 189 218
user.name=tom
user.email=tom@123.com

四、引用

.git/refs/目录下存放的有两块内容,一个是heads,其内主要是各个分支,另一个则是tags,即标签。

ls .git/refs/
heads/       # 分支head指向
tags/        # 标签(一般在程序开发过程中具有里程碑式的节点打上tag标签)

cd .git/refs/heads/

# heads下存放的是仓库所有分支,当切换分支时,HEAD文件就指向heads目录下不同的文件夹(对应到相应分支)
ls
master  temp

cat master   # master分支的哈希值 ID
c7ce7a1cd862617b218e9fee54c5bed6c7aac80a

git cat-file -t c7ce7a1cd862617b   # -t查看文件类型 哈希值只需复制一段部分,确保唯一性就行
commit            # 文件为commit类型

git cat-file -p c7ce7a1cd862617b   # -p打印查看master分支的内容信息
tree e8789a71bf52b04c96326df1ef01d1a569bd0758
parent 0d22af8537f829c20882b0d86115e002da61ae20
author xxx <xxx@163.com> 1659336789 +0800
committer xxx <xxx@163.com> 1659336789 +0800
add css

git branch -av
* master c7ce7a1 add css
  temp   a6db737 add branch

五、对象

objects目录内存放对象,其内的子文件夹都是以哈希值的前两位字符做命名。
每个object由40位字符组成,前两位字符做文件夹名,后38位做文件名。

cd .git/objects/

ls
0d/  2f/  54/  7d/  a6/  b3/  c5/  c7/  e6/  e8/  info/  pack/

cd 2f/

ls
f2bcb7d18802e4ab2895f488d0f24a61040acf

git cat-file -t 2ff2bcb7d18802e   # 将目录名2f和其下文件名组成新的哈希ID,获取其类型
tree

git cat-file -p 2ff2bcb7d18802e
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    index.html
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    readme
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    test1.cpp

object具体有三种:committreeblob,它们之间的关系为:

  • commit
    • tree
      • tree
        • blob
      • blob
      • blob
      • tree
        • blob
    • parent
    • author
    • 等其他元素信息

在这里插入图片描述

可简单理解:tree对应目录,其后会跟着blobtreeblob对应文件

文件内容相同,就认为是同一个blob
Git中文件与其文件名无关,本质是根据文件的内容来产生blob的。

git cat-file -p 0d22af8537f829   # 打印commit的信息
tree 2ff2bcb7d18802e4ab2895f488d0f24a61040acf
parent 7d1a828cc8c3e45cb98605dc9032de372e1d0c4c
author xxx <xxx@163.com> 1659336747 +0800
committer xxx <xxx@163.com> 1659336747 +0800
add index.html

git cat-file -p 2ff2bcb7d188
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    index.html
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    readme
100644 blob e69de29bb2d1d6434b8b29ae775ad8c2e48c5391    test1.cpp

六、总结

.git目录下有较多目录与文件,其中比较重要的是上文中提到的几个:HEADconfigrefs/objects/。对于objects要对committreeblob多加理解,理解其关联关系,并掌握git cat-file命令来查看object类型。


相关推荐

  1. Git 克隆子目录

    2024-02-07 01:26:02       39 阅读
  2. git 提交空目录

    2024-02-07 01:26:02       19 阅读
  3. <span style='color:red;'>02</span>_<span style='color:red;'>Git</span>

    02_Git

    2024-02-07 01:26:02      16 阅读
  4. <span style='color:red;'>01</span>-<span style='color:red;'>GIt</span>

    01-GIt

    2024-02-07 01:26:02      4 阅读
  5. <span style='color:red;'>Git</span>

    Git

    2024-02-07 01:26:02      34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-07 01:26:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-07 01:26:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-07 01:26:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-07 01:26:02       18 阅读

热门阅读

  1. 【数据结构 10】位图

    2024-02-07 01:26:02       33 阅读
  2. LDAR管理系统解决方案

    2024-02-07 01:26:02       31 阅读
  3. ES6中模板语法与字符串处理

    2024-02-07 01:26:02       39 阅读
  4. 反射的理解

    2024-02-07 01:26:02       30 阅读
  5. 【安卓中kotlin 泛型的基本用法】

    2024-02-07 01:26:02       33 阅读
  6. eslint+prettier统一管理前端代码规范-进阶篇

    2024-02-07 01:26:02       28 阅读
  7. PDF下载添加水印和访问密码

    2024-02-07 01:26:02       32 阅读
  8. 建造者模式(Builder)

    2024-02-07 01:26:02       29 阅读
  9. Linux内核与驱动面试经典“小”问题集锦(2)

    2024-02-07 01:26:02       31 阅读
  10. git 的基本概念

    2024-02-07 01:26:02       35 阅读
  11. ECMAScript日常总结--ES2018(ES9)

    2024-02-07 01:26:02       27 阅读
  12. EasyExcel的导入导出使用

    2024-02-07 01:26:02       32 阅读
  13. 鸿蒙 WiFi 扫描流程(2)

    2024-02-07 01:26:02       28 阅读
  14. 【关于实现远程启动电脑】

    2024-02-07 01:26:02       31 阅读