10.1 Git 内部原理 - 底层命令与上层命令

    当在一个新目录或已有目录执行 git init 时,Git 会创建一个 .git 目录。 这个目录包含了几乎所有 Git 存储和操作的东西。 如若想备份或复制一个版本库,只需把这个目录拷贝至另一处即可。
    新初始化的 .git 目录的典型结构如下:

    1. $ ls -F1
    2. config
    3. description
    4. HEAD
    5. hooks/
    6. info/
    7. objects/
    8. refs/

    description 文件仅供 GitWeb 程序使用,我们无需关心
    config 文件包含项目特有的配置选项
    info 目录包含一个全局性排除(global exclude)文件, 用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns)
    hooks 目录包含客户端或服务端的钩子脚本(hook scripts)

    剩下的四个条目很重要:HEAD 文件、(尚待创建的)index 文件,和 objects 目录、refs 目录。 它们都是 Git 的核心组成部分。
    objects 目录存储所有数据内容(对象数据库)

    1. $ find .git/objects/
    2. .git/objects/
    3. .git/objects/info
    4. .git/objects/pack

    refs 目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针
    HEAD 文件指向目前被检出的分支
    index 文件保存暂存区信息。