也许你早已经熟悉了Git的日常使用,但是你可曾想过:为什么每次新建Git库时都要执行git init呢?执行git init后生成的.git目录里到底藏了哪些秘密?平常使用Git客户端,以及命令行执行git命令时,Git在背后到底为我们默默地做了些什么呢?阅读本文以后,一切谜团都将引刃而解!
注:
本文的大部分写作灵感来自于“Pro Git book”。感谢原作者的精彩分享。
本文采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
.git目录
众所周知,每次我们在本地新建一个Git库时,都要执行git init
命令。Git会在新建库的根目录下为我们自动创建一个.git目录,把所有它要用到的信息都保存在这个神奇的目录里。我们日常对Git的所有操作,本质上讲,就是在对这个目录进行维护。也正是因为这个原因,如果我们想备份Git库的话,实际上只要复制这个.git目录就可以了。
为了方便后面做实验,让我们先在本地新建一个Git库,并观察.git目录下包含的内容。本文推荐大家利用Hello Git提供的两个Docker镜像作为实验环境:一个代表远程Git服务(lab-git-remote),另一个代表本地Git客户端(lab-git-local)。这两个镜像都可以从Docker Hub上找到:
docker pull morningspace/lab-git-remote
docker pull morningspace/lab-git-local
有关这两个Docker镜像的具体使用方法,请见Hello Git项目的README。本文后续讨论的所有动手环节,都将围绕这两个Docker镜像展开。现在,我们就来创建本地Git库:inside-git。
$ git init inside-git
Initialized empty Git repository in /root/inside-git/.git/
$ cd inside-git
$ ls -l .git
total 32
-rw-r--r--