首页 > 其他分享 >Mini-git,了解文件如何存储在 Git 对象中

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

时间:2024-09-20 21:13:57浏览次数:1  
标签:Mini 存储 Git 文件 对象 git 哈希

昨天,我开始自己实现 Git 的核心功能之一——具体来说,文件是如何存储的、Git 对象是什么、以及哈希和压缩的过程。我花了 4 个小时来开发,在这篇文章中,我将向您介绍我的思考过程和方法。 当您提交文件时会发生什么?当您在 Git 中提交文件时,会在幕后发生几个重要步骤: 文件压缩:使用 zlib 算法压缩文件的内容以减小其大小。此压缩内容存储在 Git 对象数据库中。 哈希计算:从压缩文件内容生成唯一的 SHA-1 哈希值。该哈希值用作 Git 对象数据库中文件的标识符。 存储对象:目标文件存储在 .mygit/objects 目录中,按哈希值的前两个字符组织。这种结构使得更容易有效地管理和检索对象。更新提交信息:演示如何在 git 中存储文件。我已经实现了提交功能,考虑了一个文件对于每个文件,我都计算了哈希值在对象文件夹内,创建新文件夹,其名称等于哈希的前两个字符。并在该文件夹内创建一个文件,以剩余的哈希值作为名称。(该文件存储提交文件的压缩格式)通过比较新计算的哈希值和文件最后计算的哈希值来检测更改 检测变化我根据自己的方法实现了这个算法,但是 Git 对这些操作使用了更高效的算法。从 oldContent 和 newContent 中提取行数组创建了一个 Map 将行存储为键,索引存储为值创建了两个新数组来存储oldContent和newContent中公共行的索引4.例如:OldCommonarray = [0 , 3] 那么删除的行将是 [1,2]GitHub 存储库领英非常感谢您的宝贵时间。 以上就是Mini-git,了解文件如何存储在 Git 对象中的详细内容,更多请关注我的其它相关文章!

标签:Mini,存储,Git,文件,对象,git,哈希
From: https://www.cnblogs.com/aow054/p/18423289

相关文章

  • Git 撤销合并
    合并时冲突合并时存在冲突,冲突未解决或者解决到一半不想解决了,或者解决完冲突了但是还没提交,想要回退到合并前的状态,使用gitmerge--abort来退出合并。该命令会尝试恢复到合并前的状态。注意在合并前,最好把改动暂存或者提交,总之就是尽可能保持工作目录干净再合并,否则可能会有些......
  • git
    git是一个强大的版本控制系统,用于跨多个用户管理代码并跟踪不同版本之间的更改。安装:从以下路径下载并安装githttps://git-scm.com/download/win登录后复制安装后,git可以通过各种命令用作版本控制系统。您可以为计算机上的特定文件夹配置git,从而允许您管理对现有文件的所有更改......
  • 实战教程:Minio与etcd本地部署 + Milvus本地数据库配置(亲测成功)
    一.minio本地部署1.获取安装包wgethttps://dl.minio.io/server/minio/release/linux-amd64/miniowgethttps://dl.min.io/client/mc/release/linux-amd64/mcchmod+xminiochmod+xmc#命令移到系统路径直接调用命令cpminio/use/local/bincpmc/use/local/......
  • git使用“保姆级”教程2——初始化及工作机制解释
    1、设置用户签名解释:签名的作用就是用来:标识用户,以区分不同的开发人员简单来说:用来标识"你是谁",在提交代码时,会显示提交代码的是谁,把设置的信息一起提交上去设置://建议最好global全局设置,这样可以在任何文件下使用git时,都不用重新设置用户签名了gitconfig--glo......
  • GitLab将会持续支持FluxCD
    GitOps是一种云原生应用程序交付新范式。通过Pull的方式,捕捉云原生应用程序和基础设施部署清单的变更,然后自动将变更部署到目标Kubernetes集群上。极狐GitLab作为早期就支持GitOps的DevOps工具,通过KubernetesAgentServer的方式实现GitOps。后来选择了和业界成熟且开......
  • 【Git】Git Commit Angular规范详解
    在团队协作开发中,保持Git提交记录的一致性和清晰性对于维护项目的可读性和历史追溯至关重要。Angular团队提出了一套详细的CommitMessage格式化规范,旨在解决这一问题。下面将详细介绍如何遵循Angular规范来编写Git提交信息,并探讨其带来的好处。Angular规范的核心要素Angu......
  • GitLab 迁移并推送代码仓库
    迁移并推送代码仓库到GitLab可以有多种方法,以下是一些常见的步骤:一、创建空仓库在Gitlab上创建一个空仓库方式一:点击左上角“+”号,选择新建项目/仓库方式二:进入“项目”界面,点击右上角“新建项目”按钮​​‍选择“创建空白项目”​​填写项目信息并点击“新建项目”......
  • GitLab 迁移并推送代码仓库
    迁移并推送代码仓库到GitLab可以有多种方法,以下是一些常见的步骤:一、创建空仓库在Gitlab上创建一个空仓库方式一:点击左上角“+”号,选择新建项目/仓库方式二:进入“项目”界面,点击右上角“新建项目”按钮​​‍选择“创建空白项目”​​填写项目信息并点击“新建项目”......
  • 访问Github卡顿甚至进不去的解决办法(适用于Windows)
    本文首发自个人博客:点我查看一、前言Github是全球知名的开源宝库,但是对国内用户并不友好。当我们在浏览器中输入www.github.com时,如果你赶的时间点比较好可能会进去,但是大多数情况下浏览器不会对你的请求做出任何响应,就像下图这样:那么,有什么办法解决这个问题呢?二、访问Gith......
  • Git常用命令介绍
    Git,是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。支持克隆/下载。Git教程:https://git-scm.com/book/zh/v2TortoiseGit 客户端: https://tortoisegit.org/download/SmartGit客户端支持windows/macOS/Linux: https://www.syntevo.c......