博客
关于我
git工作区、暂存区、本地仓库
阅读量:596 次
发布时间:2019-03-11

本文共 1769 字,大约阅读时间需要 5 分钟。

Git版本库的结构分析与文件操作详解

1. Git仓库目录结构

Git是一个版本控制系统,它在仓库目录结构中包含多个重要文件和子目录,以下是详细说明:

  • .git目录:这是Git版本库的主目录,包含以下关键文件和目录:
    • HEAD:指明当前工作区基础上哪个 Commit 被存储为仓库的最后一录。
    • config:存储Git配置文件,用于控制仓库的行为设置。
    • description:描述仓库的简要信息,主要用于Gitweb等托管服务。
    • hooks:存储一些脚本文件,用于Git事件触发的处理逻辑。
    • objects/
      • info:存储仓库的校验对象,确保文件完整性。
      • pack:存储仓库中的优化包,由多个对象组成。
    • refs
      • heads:存储每个分支最后一个 Commit 的对象指针。
      • tags:存储版本标签的 commit 对象指针。

2. 添加并提交第一个文件

Git Add操作

执行 git add 命令时,我们创建了第一个文件的 Blob对象,并将其记录到 Git 索引中。以下是操作过程及其影响:

echo "Hello Git" > a.txtgit add a.txt

执行上述命令后,Git仓库会产生以下文件变化:

  • .git/objects/9f/4d96d5...b1349a:这是一个 Blob对象,存储了文件内容 Hello Git。Blob对象是 Git 的基本存储单元,用于存储文件内容。

  • .git/index:更新索引文件,表明新增文件已被暂存。此外,索引文件中记录的每一行将文件的哈希值和文件名一并存储,便于后续查找和处理。

Git Commit操作

执行 git commit 后,Git会生成两个新的对象:Commit对象和Tree对象。以下是具体内容和影响:

git commit -m "first commit"
  • .git/objects/88/23e...ec5:这是一个 Commit对象。它是当前工作区的 最终_snapshot,记录了提交操作的 commit 信息,包括提交者、提交时间和提交日志。

  • .git/objects/9f/4d96d5...b1349a:这是一个 Blob对象,存储了文件内容 Hello Git

  • .git/refs/heads/master:创建并指向上述 Commit对象,标记当前工作区的最终提交。

此外,工作区目录中会生成两个新的文件:

  • .git/objects/info:记录所有对象的校验和,以确保对象文件不可篡改。

  • .git/refs:存储引用文件,其中 master 分支指向提交操作生成的 最终_commit对象。

3. 添加并提交第二个文件

接下来,我们继续添加一个新文件并提交:

mkdir tempecho "Second file" > temp/b.txtgit add temp/b.txtgit commit -m "second commit"

执行上述命令会产生以下影响:

  • .git/objects/20/d5b672...3008:创建新的 Blob对象,存储文件 Second file 的内容。

  • .git/objects/80/0910d7...612:创建新的 Git Tree对象。Tree对象的作用是存储提交文件及其文件结构信息,此处它包含了新文件 Second file 的 Blob对象。

  • .git/refs/heads/master:指向最新的提交对象_,其中包含了之前和当前的提交信息。

此外,再次更新了索引文件和校验和对象文件。

4. 暂存区与版本库

  • 暂存区(Stage):这是 Git 的临时存储区域,用来灵活选择提交哪些文件。通过 git add 命令将文件添加到暂存区,通过 git commit 提交暂存区中的文件到 Git 仓库。

  • 版本库(Repository):存储所有 Git对象(包括 Blob、Tree 和 Commit)。这些对象通过 reference(引用)关联,便于快速查找和检修文件历史。

总结来说, Git 的核心机制在于通过生成不同类型的对象(Blob、Tree 和 Commit)记录文件操作历史,又通过索引(Index)快速定位文件内容和状态,进而实现高效的版本控制。

转载地址:http://buivz.baihongyu.com/

你可能感兴趣的文章
Nginx配置后台网关映射路径
查看>>
nginx配置域名和ip同时访问、开放多端口
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
Nginx配置负载均衡到后台网关集群
查看>>
ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
查看>>
NHibernate学习[1]
查看>>
NHibernate异常:No persister for的解决办法
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>
NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
查看>>