.git目录简介

目录

•   .git目录简介

•    实践证明 (环境:windows + cygwindow)


HEAD:指向当前的工作路径

config:当前仓库的配置信息,core,用户,远程,分支等信息

refs/heads:  存放项目所有的分支

refs/tags :    存放tag (tag又名里程牌)

objects:存放对象


实践证明 

简单介绍下要使用到的命令

cat  查看文件内容,创建文件,文件合并,追加文件内容等功能

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》 的歌词

你可能感兴趣的:(.git目录简介)