Git(四).git 目录

1,850 阅读3分钟

使用git init命令创建本地仓库时会自动创建一个.git目录,此目录存储了所有项目历史数据和元信息。

|-- hooks
    |-- applypatch-msg.sample
    |-- commit-msg.sample
    |-- fsmonitor-watchman.sample
    |-- post-update.sample
    |-- pre-applypatch.sample
    |-- pre-commit.sample
    |-- pre-merge-commit.sample
    |-- prepare-commit-msg.sample
    |-- pre-push.sample
    |-- pre-rebase.sample
    |-- pre-receive.sample
    |-- push-to-checkout.sample
    |-- update.sample
|-- info
    |-- exclude
    |-- refs
|-- logs
    |-- refs
        |-- heads
            |-- master
    |-- HEAD
|-- objects
    |-- info
    |-- pack
|-- refs
    |-- heads
        |-- master
    |-- tags
|-- COMMIT_EDITMSG
|-- config
|-- description
|-- HEAD
|-- index

一、hooks

存放 git 提交的各阶段文件,用于在 git 命令前后执行检查和一些自定义操作。

二、info

  • info/exclude git init初始化时只生成这个文件,用于排除提交规则,与.gitignore功能类似,区别在于.gitignore文件会被提交到版本库中,团队共享排除提交规则,而info/exclude只影响本地,不影响团队其他人,此文件也不会被提交到版本库中。

  • info/refs 如果新建了分支就会生成info/refs文件,用于跟踪各分支信息。此文件需要使用git update-server-info命令生成,内容如下:

9b9f52c2c2d8f5dbdec959f7e468649c3802dd39	refs/heads/develop
9b9f52c2c2d8f5dbdec959f7e468649c3802dd39	refs/heads/master

git clone执行后会获取info/refs文件,info/refs文件中记录了远端仓库的所有分支和引用信息。

三、logs

保存所有更新操作的引用记录,主要用于git reflog

四、objects

git init初始化时会在objects目录下生成两个空文件夹:infopack,执行git add命令后文件就会存入objects

五、refs

refs下有两个文件夹headstags

  • heads存储对分支的引用,一般由git branch命令生成。
  • tags存储对标签的引用,一般由git tag命令生成。
|-- refs
    |-- heads
        |-- develop
        |-- master
    |-- tags
        |-- 0.1.0
        |-- 1.0.0

六、COMMIT_EDITMSG

存储最后一次 Commit 时的 Message 信息。

七、config

记录项目配置信息,git config命令会改动此文件内容。

[core]
	repositoryformatversion = 0
        # 如果为 true 则当文件权限发生变化时也算作文件差异。
	filemode = false
        # 裸仓库,`git init`初始化时可以加上`--bare`决定是否创建一个裸仓库。
        # 普通 git 仓库中有 .git 文件夹用以存储所有项目历史数据和元信息以便构建工作副本。
        # 裸仓库没有 .git 文件夹,会把初始化的文件或文件夹直接放在项目根目录中。
	bare = false
	logallrefupdates = true
	symlinks = false
        # 忽略文件大小写,如果为 true 则当文件名称出现大小写变化时,git 会忽略此变化。
	ignorecase = true

八、description

记录项目描述信息,用于 GitWeb,通过浏览器访问可以查看项目描述(Description)。

九、HEAD

存储当前位置指针指向当前工作区所在分支。

ref: refs/heads/master

十、index

暂存区,也成为 stage,是一个索引文件。执行git add命令后文件会存入 Git objects 中,并使用索引进行定位。index是一个二进制文件,无法直接用文本编辑器查看,可以使用git ls-files --stage命令查看。

PS D:\...> git ls-files --stage
100644 043a3b46337b46164a5626816c2984b48be968ea 0       A.txt
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       B.md
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       build.sh