Skip to content

Latest commit

 

History

History
38 lines (24 loc) · 2.12 KB

.git-directory.md

File metadata and controls

38 lines (24 loc) · 2.12 KB

.git 目录

在 Git 中,我们将 .git 目录的内容称为“附属于该仓库的工作树”。文件的编辑等操作在工作树中进行,然后记录到仓库中,以此管理文件的历史快照。如果想将文件恢复到原先的状态,可以从仓库中调取之前的快照,在工作树中打开。

当在一个新目录或已有目录执行 git init 时,Git 会创建一个 .git 目录。这个目录包含了几乎所有 Git 存储和操作的对象。对于一个全新的 git init 版本库,该目录的默认结构如下:

$ ls -F1
hooks/
info/
objects/
refs/
config
description
HEAD

当克隆一个仓库后,Git 也会初始化一个 .git 目录,从远程仓库拉取所有数据放入其中,然后从中读取最新版本的文件的拷贝。Git 克隆的是该 Git 仓库服务器上的几乎所有数据,而不是仅仅复制完成你的工作所需要的文件。

所以,如果想备份或复制一个版本库,只需把这个 .git 目录拷贝至另一处即可。

下面对该目录的内容进行简单的介绍:

  • hooks/ 目录包含客户端或服务端的钩子脚本(hook scripts)。

  • info/ 目录包含一个全局性排除(global exclude)文件,用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns)。

  • objects/ 目录存储所有数据内容,包括数据对象(blob)、树对象(tree object)、提交对象(commit object)和标签对象(tag object)。

  • refs/ 目录存储所有的引用,包括分支、标签引用和远程引用。引用实际上是指向一个提交对象的指针。

  • config 文件包含项目特有的配置选项。

  • description 文件仅供 GitWeb 程序使用,我们无需关心。

  • HEAD 文件指示目前被检出的分支。注意,HEAD 文件是一个符号引用,它并不像普通引用那样指向一个提交对象——它是一个指向其他引用的指针。

其中,HEAD 文件、index 文件(尚待创建,用于保存暂存区信息),和 objects/ 目录、refs/ 目录 是 Git 的核心组成部分。