Git的工作机制

Git 的核心工作机制

🔍 差异存储(Delta Storage)

Git 会比较文件的变化,只存储改变的部分,而不是整个文件的完整副本。

举个例子:

假设你有一个 100KB 的文件,第一次提交时 Git 会完整保存。

第二次只修改了一行代码,Git 只会存储:

  • "第50行,删除了 'old code',新增了 'new code'"
  • 而不是重新保存整个 100KB 的文件

📦 高效的对象存储

Git 使用四种核心对象:

  1. Blob:存储文件内容
  2. Tree:存储目录结构
  3. Commit:存储提交信息(作者、时间、父提交等)
  4. Tag:存储标签信息

🔄 工作原理

复制代码
第一次提交:文件A(版本1) → Blob对象A1
第二次提交:文件A(版本2) → 比较差异 → 存储差异 + 指向A1的引用
第三次提交:文件A(版本3) → 比较差异 → 存储差异 + 指向A2的引用

验证你的理解

你可以通过以下命令看到 Git 的智能存储:

bash 复制代码
# 查看某个文件的历史变化
git log -p 文件名

# 查看存储效率
git count-objects -v

为什么这样设计?

  1. 节省空间:只存储变化,大大减少仓库体积
  2. 快速比较:可以轻松比较任意两个版本之间的差异
  3. 完整历史:通过链式引用,可以重建任何历史版本
  4. 分支高效:创建分支几乎不占额外空间

例外情况

对于二进制文件(如图片、编译产物),Git 无法进行差异分析,所以会完整存储每个版本。这就是为什么建议不要在 Git 中存放大型二进制文件。

你的理解完全正确! Git 是一个智能的版本控制系统,而不是简单的文件备份工具。这正是它比直接复制文件夹高效得多的原因。

相关推荐
Lester_11015 小时前
STM32 高级定时器PWM互补输出模式--如果没有死区,突然关闭PWM有产生瞬间导通的可能吗
stm32·单片机·嵌入式硬件·嵌入式软件
小李独爱秋7 小时前
“bootmgr is compressed”错误:根源、笔记本与台式机差异化解决方案深度指南
运维·stm32·单片机·嵌入式硬件·文件系统·电脑故障
ASKED_20197 小时前
Langchain学习笔记一 -基础模块以及架构概览
笔记·学习·langchain
Lois_Luo8 小时前
Obsidian + Picgo + Aliyun OSS 实现笔记图片自动上传图床
笔记·oss·图床
(❁´◡`❁)Jimmy(❁´◡`❁)8 小时前
Exgcd 学习笔记
笔记·学习·算法
傻小胖8 小时前
21.ETH-权益证明-北大肖臻老师客堂笔记
笔记·区块链
一只小小的芙厨11 小时前
寒假集训笔记·树上背包
c++·笔记·算法·动态规划
深蓝海拓12 小时前
PySide6从0开始学习的笔记(二十七) 日志管理
笔记·python·学习·pyqt
xqqxqxxq12 小时前
Java Thread 类核心技术笔记
java·笔记
老师用之于民12 小时前
【DAY21】Linux软件编程基础&Shell 命令、脚本及系统管理实操
linux·运维·chrome·经验分享·笔记·ubuntu