前言
在上一篇文章中,我们完成了 Git 的安装与验证,算是把"工具"准备好了。但是,光有工具还不行,我们得有一个存放代码的"工作台"。在 Git 的世界里,这个工作台叫做仓库(Repository)。
很多初学者刚开始用 Git 时,只知道机械地敲 git add . 和 git commit -m "update",但完全不清楚这背后文件到底去了哪里。本篇我们将从零创建一个本地仓库,并揭开 Git 最核心的设计------工作区、暂存区、版本库。理解了这三大区域,你才算真正跨进了 Git 的大门。
1 创建本地仓库与 .git 目录探秘
要使用 Git 管理项目,第一步就是初始化一个本地仓库。我们在 Xshell 连上 CentOS 服务器后,假设要在 /home/xc 目录下创建一个名为 my-project 的项目:
bash
# 1. 创建并进入项目目录
mkdir -p /home/xc/my-project
cd /home/xc/my-project
# 2. 初始化 Git 仓库
git init
执行 git init 后,终端会提示 Initialized empty Git repository in /home/xc/my-project/.git/。这时候你通过 ls -a 查看,会发现目录下多了一个隐藏文件夹:.git。
bash
$ git init
Initialized empty Git repository in /home/xc/my-project/.git/
$ ls -a
. .. .git
这个 .git 文件夹就是 Git 的灵魂。你可以使用 tree 命令来看一下它的内部结构(如果 CentOS 提示找不到 tree 命令,可以通过 yum install -y tree 安装):
bash
$ tree .git
.git
|-- branches
|-- config
|-- description
|-- HEAD
|-- hooks
| |-- applypatch-msg.sample
| |-- commit-msg.sample
| |-- post-update.sample
| |-- pre-applypatch.sample
| |-- pre-commit.sample
| |-- prepare-commit-msg.sample
| |-- pre-push.sample
| |-- pre-rebase.sample
| `-- update.sample
|-- info
| `-- exclude
|-- objects
| |-- info
| `-- pack
`-- refs
|-- heads
`-- tags
9 directories, 13 files
你会看到 HEAD、config、objects、refs 等文件和目录。
重要警告: 以后在开发过程中,千万不要手动去修改或删除
.git目录里面的任何内容。这里是 Git 的"大脑",里面存储了所有的版本历史、配置和对象数据。如果你手动修改了里面的文件,极大概率会导致仓库彻底损坏、代码丢失。
2 配置本地仓库(用户名与邮箱)
Git 是一个分布式版本控制系统,当多人协作时,系统需要知道每一次提交是谁做的。因此,在提交代码前,我们需要配置用户的 name 和 email。这里我们重点讲只对当前本地仓库生效的配置方式:
bash
# 配置当前仓库的用户名
git config user.name "你的用户名"
# 配置当前仓库的邮箱
git config user.email "你的邮箱地址"
配置完成后,使用以下命令可以查看当前仓库的所有配置:
bash
git config -l
如果你发现名字或者邮箱填错了,想要删除这两项配置,可以使用 --unset 参数:
bash
git config --unset user.name
git config --unset user.email
延伸:配置所有本地仓库(全局配置)
如果你想让这台服务器上的所有 Git 仓库都使用相同的身份,可以加上 --global 参数。这也是我们在实际开发中最常用的方式:
bash
# 配置全局用户名与邮箱
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱地址"
同理,如果想重置/删除全局配置,只需在 --unset 命令前加上 --global 即可:
bash
git config --global --unset user.name
git config --global --unset user.email
小结: 不加
--global是"局部配置"(只影响当前仓库),加了是"全局配置"。局部配置的优先级高于全局配置。
3 认识三大核心区域

接下来是本节的重头戏。请对照上面的图片,我们把 Git 的核心工作流拆解为三大区域:
-
工作区(Working Directory): 就是服务器上你能看到的文件目录(比如刚才创建的
/home/xc/my-project文件夹,对应图左侧的区域)。在这里你可以自由地新建、修改、删除文件。 -
版本库(Repository): 就是那个隐藏的
.git目录(对应图右侧的大黑框)。它包含了 Git 所有的版本历史,是 Git 真正的"大脑"。 -
暂存区(Stage / Index): 它存在于版本库中,是一个临时存放区域(对应图中的
stage (index)框)。 -
git add做了什么?当你在工作区修改了文件,执行
git add时,Git 会将工作区中修改的内容添加进版本库的暂存区中。此时,修改还没有真正被记录为历史版本。 -
git commit做了什么?当你确认无误后,执行
git commit,Git 会将暂存区中的内容提交到master分支下,这就是一次真正的版本保存。
4 揭秘版本库内部:对象与索引
结合这张图,我们再来深挖一下版本库内部的底层逻辑。理解这些底层的指针与对象关系,是掌握Git 高效存储机制的关键:
-
对象库(objects): 位于
.git/objects目录下。无论是执行add还是commit,Git 都会将文件内容计算哈希值,打包成一个个 Git 对象(git object) ,并统一存放在 objects 库中。这是 Git 真正保存数据的地方。 -
暂存区的本质: 仔细看图,
stage (index)里面放的不是真实文件,而是指向 objects 的索引(指针)。 -
master 分支的本质: 同理,
master分支里存放的也是一棵目录树,这棵树上的每一个文件节点,最终都指向 objects 库中的对象索引。 -
HEAD: 图右上角的
HEAD是一个指针,它始终指向当前所在的分支(目前是master)。只要拿到HEAD,Git 就能顺藤摸瓜,找到master对应的那棵树,从而读取整个版本库的内容。
一句话总结: 工作区是看得见的文件,暂存区是待提交的索引清单,对象库(objects)是真正存放内容的保险箱,而
HEAD是带你寻宝的指南针。
我们也能在 .git 目录中看到一些相关内容:

5 小结
这一节我们完成了三件事:
-
使用
git init创建了本地仓库,并看到了神秘的.git目录(牢记不要手动修改它)。 -
学习了如何对"本地仓库"和"全局仓库"进行用户名、邮箱的配置、查看与重置。
-
结合图片认识了 Git 的三大核心区域,并深入了解了
add与commit的底层逻辑,以及 objects 对象库、master分支和HEAD指针的关系。
现在,仓库建好了,理论也懂了,可是我们还没写过一行代码。下一节,我们将正式动手,体验添加文件、查看状态、修改文件、版本回退等一系列基本操作。