1. Git目录结构

* hooks (钩子函数的一个库 类似于回调函数)
* info (包含一个全局性的排除文件)
* objects (目录存储所有数据内容)
* refs (目录存储指向数据(分支)的提交对象的指针)
* config (文件包含项目特有的配置选项)
* description (显示对仓库的描述信息)
* HEAD (文件目前被检出的分支) 
* logs (日志信息)
* index (文件保存暂存区的信息)

2. 三个区的位置

我们先来理解下Git 工作区、暂存区和版本库概念,这对以后我们学习Git命令会有非常大的帮助。

2.1. 工作区

一般我们执行git init或者git clone命令,就能把一个目录初始化成Git本地版本库。

而这个目录就是该Git本地版本库的工作区。

如下图:gittest目录就是一个本地仓库。

具体结构如下图:

2.2. 暂存区

  • 暂存区从字面上去理解就是用来暂时保存文件的地方,实际上它的作用和它的名字是一致的,暂存区可以起到过渡的作用,当我们写代码修改了一些文件的时候,可以把修改的代码提交到暂存区保存,然后接着写代码,接着再提交到暂存区保存,写完某些代码觉得没什么可以修改的时候,可以将暂存区里面的文件一次性提交到版本库。
  • 暂存区英文叫stage,或index
  • 暂存区是包含在版本库中的,一般存放在.git目录下的index文件.git/index)中,所以我们把暂存区有时也叫作索引(index)。

暂存区位置如下图:

2.3. 版本库

版本库:工作区(项目根目录)有一个隐藏目录.git就是版本库,包括索引树(index文件)本地版本库(objects目录),而该目录不算工作区。

具体结构如下图:

说明:

版本库又存在两个很重要的区域:暂存区与分支区。

分支区:该区域中可以包含很多分支,而每个分支都可以记录当前工作区中文件状态的快照。

如下图:

即:分支区.git/objects就相当于本地版本库。

3. 三个区的关系

1)工作区新加文件 index.html

2)将index.html提交到暂存区

3)将暂存区内的内容提交到版本库

4)将本地版本推送到远程仓库上