Git 对象存储的状态

admin 2025年6月29日02:54:00评论5 views字数 716阅读2分23秒阅读模式

你好,这里是网络技术联盟站呀!

你可能已经习惯了以下操作:

git add .git commit -m "修改了配置文件"

但你是否想过:

Git 是怎么“存储”你的改动的?
每次提交,背后发生了什么?
.git/objects/ 里那些奇怪的哈希值是什么?

这篇文章,我们就来剖开 Git 的外壳,深入它的对象存储系统内部,看看 Git 如何通过四种核心对象哈希机制引用系统来管理我们看似简单的提交、修改与历史。

🧩 Git 是“内容寻址的对象数据库”

Git 并不是按“文件名”来追踪,而是按内容来管理版本的。

Git 的对象数据库存储路径为:

.git/objects/

每一个对象在被创建时,都会被压缩、计算哈希(SHA-1 或 SHA-256),然后保存在上述目录中。

这意味着:

相同内容 → 只存一份
每一个提交、目录、文件快照 → 都是一个“对象”

🧱 Git 的四种核心对象类型(Git Object Types)

这些对象之间构成了一套指向关系,形成一个可追溯的版本历史链。

🔍 Git 对象存储结构长啥样?

让我们通过一个实际例子来感受一下:

mkdir git-obj-demo && cd git-obj-demogit initecho "hello git" > file.txtgit add file.txtgit commit -m "第一次提交"

此时你可以查看 .git/objects/ 目录结构:

tree .git/objects

输出类似:

说明:

Git 使用前 2 位哈希作为文件夹名
后 38 位作为文件名
每个文件即一个 Git 对象(blob/tree/commit)

📦 Git 每次提交到底生成了什么对象?

原文始发于微信公众号(网络技术联盟站):Git 对象存储的状态

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月29日02:54:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Git 对象存储的状态https://cn-sec.com/archives/4207012.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息