目录
• .git目录简介
• 实践证明 (环境:windows + cygwindow)
HEAD:指向当前的工作路径
config:当前仓库的配置信息,core,用户,远程,分支等信息
refs/heads: 存放项目所有的分支
refs/tags : 存放tag (tag又名里程牌)
objects:存放对象
实践证明
简单介绍下要使用到的命令
cat <file name> 查看文件内容,创建文件,文件合并,追加文件内容等功能
git cat-file -t <40位哈希值>显示对象的类型
git cat-file -s <40位哈希值> 显示对象的大小
git cat-file -p <40位哈希值>根据对象的类型显示其内容
注: Git中,哈希值足以标致其唯一性了即可,不必全写。
准备工作:
① 准备几个不同内容文件逐个提交
② 新建一个分支temp
③ 创建一个tag( tag_c0 )
START:
HEAD
进入 .git 文件夹,由于HEAD是个文件,直接使用cat命令查看内容,内容指向ref: refs/heads/temp,我们通过 git branch -av 查看所有分支,验证temp正好是当前工作分支。
config
config就是一个配置文件,直接 cat config 及查看到内容
refs /heads
refs /heads 下有两个文件,temp与master。 " cat temp " 查看文本内容,得出一串哈希值:a926e877e666c..........。git cat-file -t a926e877e666cec2c7查看其类型为 commit, git branch -av 查看分支信息得到的哈希值也与 “cat temp”得到的哈希值一致,所以heads下保存的就是分支信息.
refs/tags
cat tag_c0 5e80fe0b78a8da56d5e47ef7556a3a16c365050a //tag的哈希码
git cat-file -t 5e80fe0b78a8da tag //类型为tag
git cat-file -p 5e80fe0b78a8da //查看tag内容 object 9a7350aee210b98594295b36083813aed88eadce type commit tag tag_c0tagger *** <****@163.com> 1547540870 +0000 (内容包含: 一个object对象,对象类型,及作者)
git cat-file -p 9a7350aee210b985 //查看object对象内容 tree 7866dc35fc58262fa037132cebcb648a5369b2ec parent a926e877e666cec2c7acd483f9ebd2bfe35e18a9 author ***<******@163.com> 1547539465 +0000 committer ***<*******@163.com> 1547539465 +0000 add That's why
这里进行了两次 cat xxx 命令,第一次得到的是tag自己的哈希码,里面包含了一个object对象,类型为commit 。查看这个object内容,得到tab所属节点信息。
objects
objects: 每个object由40位字符组。每一个文件夹下都有一个文件,文件夹一对象哈希值前两位命名,文件以哈希值后38为命名。 当对象过多,则会打包装进pack
以e0 对象为例
哈希值=文件夹名(e0)+文件名(7a6a8fc5bb209c0c7886c49d47a316049f47b3)
类型:commit
内容:包含一个tree对象( d8755952b2f7cd7638d515c71fc765ccc06f6bcc)
tree:包含一个名为style.txt 的blob文件对象
style内容:复制的《Don't Cry》 的歌词