登录
首页 >  文章 >  前端

Mini-git,了解文件如何存储在 Git 对象中

来源:dev.to

时间:2024-08-23 12:57:47 388浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《Mini-git,了解文件如何存储在 Git 对象中》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

Mini-git,了解文件如何存储在 Git 对象中

昨天,我开始自己实现 Git 的核心功能之一——具体来说,文件是如何存储的、Git 对象是什么、以及哈希和压缩的过程。我花了 4 个小时来开发,在这篇文章中,我将向您介绍我的思考过程和方法。

当您提交文件时会发生什么?

当您在 Git 中提交文件时,会在幕后发生几个重要步骤:

文件压缩:

使用 zlib 算法压缩文件的内容以减小其大小。此压缩内容存储在 Git 对象数据库中。

哈希计算:

从压缩文件内容生成唯一的 SHA-1 哈希值。该哈希值用作 Git 对象数据库中文件的标识符。

存储对象:

目标文件存储在 .mygit/objects 目录中,按哈希值的前两个字符组织。这种结构使得更容易有效地管理和检索对象。
更新提交信息:

演示如何在 git 中存储文件。
我已经实现了提交功能,考虑了一个文件

  1. 对于每个文件,我都计算了哈希值
  2. 在对象文件夹内,创建新文件夹,其名称等于哈希的前两个字符。
  3. 并在该文件夹内创建一个文件,以剩余的哈希值作为名称。(该文件存储提交文件的压缩格式)
  4. 通过比较新计算的哈希值和文件最后计算的哈希值来检测更改

检测变化

我根据自己的方法实现了这个算法,但是 Git 对这些操作使用了更高效的算法。

  1. 从 oldContent 和 newContent 中提取行数组
  2. 创建了一个 Map 将行存储为键,索引存储为值
  3. 创建了两个新数组来存储oldContent和newContent中公共行的索引 4.例如: OldCommonarray = [0 , 3] 那么删除的行将是 [1,2]

GitHub 存储库
领英

非常感谢您的宝贵时间。

今天关于《Mini-git,了解文件如何存储在 Git 对象中》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>