集册 沉浸式学 Git Git 内幕:.git 目录

Git 内幕:.git 目录

欢马劈雪     最近更新时间:2020-08-04 05:37:59

163

目的

学习有关 .git 目录结构的内容。

.git 目录

是时候做些浏览了。首先,从你的项目根目录开始……

$ ls -C .git
$ ls -C .git
COMMIT_EDITMSG  ORIG_HEAD   hooks       logs        rr-cache
HEAD        config      index       objects
MERGE_RR    description info        refs

这是全部 Git 东东所存储的魔法目录。让我们一瞥对象目录。

对象存储

$ ls -C .git/objects
$ ls -C .git/objects
09  1f  27  43  69  83  97  af  e4  info
0f  22  28  58  6b  94  9c  b5  e7  pack
11  24  32  59  78  96  a1  c4  eb

你应当看到一串包含两个字符名称的目录。目录名称是 Git 中对象存储的 sha1 哈希的开头两个字符。

深入对象存储

$ ls -C .git/objects/<dir>
$ ls -C .git/objects/09
6b74c56bfc6b40e754fc0725b8c70b2038b91e  9fb6f9d3a104feb32fcac22354c4d0e8a182c1

看看两字符目录的其中之一。你应当看到一些具有 38 个字符名称的文件。这些是 Git 中包含对象存储的文件。这些文件已被压缩和编码,所以直接查看它们的内容并没有什么用处,但我们将看一点。

配置文件

$ cat .git/config
$ cat .git/config
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[user]
    name = Jim Weirich
    email = jim (at) neo.com

这是项目级配置文件。在这儿的配置条目将覆盖你的主目录中 .gitconfig 文件中的配置条目,至少对此项目来说是如此。

分支与标签

$ ls .git/refs
$ ls .git/refs/heads
$ ls .git/refs/tags
$ cat .git/refs/tags/v1
$ ls .git/refs
heads
tags
$ ls .git/refs/heads
master
$ ls .git/refs/tags
v1
v1-beta
$ cat .git/refs/tags/v1
1f7ec5eaa8f37c2770dae3b984c55a1531fcc9e7
展开阅读全文