目的
学习有关 .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