什么是Git目录
Git目录一般就是指项目根目录下的.git
目录,它是一个隐藏文件,所以如果在mac系统的终端
或iterm
工具进入项目目录后一般是看不到的,不过直接输入cd .git
就可以看到目录的信息。
那么Git目录是做什么用的呢?
每一个项目都只能有一个Git目录,它是为你的项目存储所有历史和元信息的目录,包括上文提到的所有对象
(commits
、trees
、blobs
、tags
),而这些对象指向不同的分支。通过指令cd .git
查看目录的内容,即可看到所有的重要文件如下:
* HEAD //表示这个git项目处在哪个分支里
* config //项目的配置信息,输入`git config`相关命令将会改动它
* description //项目的描述信息
* hooks //系统默认钩子脚本目录
* index //索引文件
* logs //各个refs的历史信息
* objects // 本地仓库的所有对象 (`commits`, `trees`, `blobs`, `tags`)
* refs //项目里的每个分支指向了哪个`commit`
也许通过`cd .git`命令还会看到其他的文件或目录,比如我的项目中还有branches、tree、sourcetreeconfig等,也许你的项目中还有其他与我也不同的东西,不过目前这些不重要,先知道以上几个就好了。
Git目录与Git工作目录区别
Git的工作目录只是用来临时保存checkout
过的用来编辑的文件的地方,可供编辑直到下次commit
为止。
Git目录用来保存所有历史信息。
什么是Git索引
首先上图:
使用git的简单工作状态是这样的:你拥有一个git仓库(repository),此刻我们说的是本地仓库,而非远程的(remote)。把仓库(repository)中的内容
checkout
出来,就得到了一个工作目录(此图中橙色的working directory)
,在工作目录
里你可以编辑与修改你的文件。而在你的工作目录
和仓库
之间还有一个暂存区(此图中的staging area)
,它就是Git索引(index)。有了它,如果你提交了了一个commit
或多个commit
到仓库
,那么你commit
的就是Git索引(index)中的内容,而非工作目录中的内容。