Git|探寻Git如何管理文件版本的小秘密

简介: 本文的主要围绕着下面这个问题展开的,在阅读之前可以先自己思考一下问题的答案是什么:git 是如何管理项目每次变更记录的?

本文的主要围绕着下面这个问题展开的,在阅读之前可以先自己思考一下问题的答案是什么?

  • git 是如何管理项目每次变更记录的?

当我们创建一个仓库的时候,在仓库的根目录下,除了项目文件,还有一个.git文件夹。.git文件夹中的内容就与版本控制相关。

在探秘 git 如何记录修改记录之前,我们先看看.git下的一些文件用途:

  • .git/config:主要是当前项目的git配置信息
  • .git/logs/:此文件夹主要记录每个分支的每次修改的日志
  • .git/HEAD:记录工作区中指向哪一个分支
  • .git/refs/heads/:此文件夹下存放的文件对应每一个分支,文件中存放的是commit对应的版本号

.git/HEAD.git/refs/heads/组合起来正好表示工作区的项目在哪个分支的哪次提交上面做修改。

接着看一下 git 资源库的对象,首先我们要借助一个命令git cat-file,这个可以查看资源库对象的内容或类型和大小信息。

  • git cat-file -t:查看资源库对象的类型
  • git cat-file -p:查看资源库对象的内容

每一次的 commit 都会仓库中的文件产生一些改变,这时候会生成一个记录,会有一个对应的修订号,这就像对当时的项目文件做一次快照处理,这个是通过资源库的对象保存的。

首先查看仓库的提交记录:

image.png

接着我们选取一次修订号,查看这个对象的类型和内容

git cat-file -t 2f001c07fee6d3357da689b0fce
git cat-file -p 2f001c07fee6d3357da689b0fce

image.png

从这个对象内容的,我们可以看出来一个commit对象,主要包含一下几部分

  • tree:修改的文件路径,这里指向一个文件夹
  • parent:上一次提交代码时的修订号,对应日志中上一次的提交记录
  • author:修改文件的作者
  • committer:提交修改的人,提交人和修改人可以是不同的人

我们可以通过 commit 对象里面的内容接着往下查看,先查看一下tree里面的内容

image.png

这个对象里面包含两个blob类型的对象,通过行末信息我们可以发现这是之前添加的a.txtb.txt文件。

如果我们在a.txt同级目录创建一个test文件夹,里面添加一个文件c.txt,那么git会怎么存储呢?


1、添加一个新的文件,提交记录会改变,我们需要查看最新的提交记录

image.png

2、查看最新的提交记录的对象的内容

image.png

3、接着去查询对应tree对象内容,可以发现其中除了文件,还指向了另外一个tree,对应的是test文件夹,

image.png

4、接着查看test文件夹对应的tree对象,这里面存放着c.txt文件

image.png

5、如果我们接着往下走,查看这个blob对应的修订号,会发现里面就是c.txt文件中的内容

image.png

此时,对Git中的文件存放方式可以有一个大概的了解了,每次 commit 对应一个对象,里面存放一些提交相关的信息,并且指向了上次提交记录和一个tree,tree表示一个文件夹,commit中的这个tree这个文件夹更像是整个项目的根目录。

一个tree中可能存在tree,也可能存在blobblob表示目录中的文件,tree表示这个目录中的目录。简直就是套娃操作。

示例项目可以参考下图

git存储.png

目录
相关文章
|
17天前
|
开发工具 git 索引
怎么取消对project.private.config.json这个文件的git记录
通过以上步骤,您可以成功取消对 `project.private.config.json`文件的Git记录。这样,文件将不会被包含在未来的提交中,同时仍保留在您的工作区中。
58 28
|
30天前
|
前端开发 Java 开发工具
Git使用教程-将idea本地Java等文件配置到gitte上【保姆级教程】
本内容详细介绍了使用Git进行版本控制的全过程,涵盖从本地仓库创建到远程仓库配置,以及最终推送代码至远程仓库的步骤。
39 0
|
4月前
|
Shell 开发工具 git
git学习三:git使用:删除仓库,删除仓库内文件
通过GitHub的设置页面删除仓库,以及如何使用Git命令行删除仓库中的文件或文件夹。
234 1
git学习三:git使用:删除仓库,删除仓库内文件
|
8月前
|
开发工具 数据中心 git
详解IDEA git 版本回滚
详解IDEA git 版本回滚
319 0
|
4月前
|
开发工具 git 索引
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
136 4
|
4月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
62 1
|
5月前
|
安全 开发工具 git
git合并错了,我想回退到之前的版本
git合并错了,我想回退到之前的版本
|
6月前
|
缓存 开发工具 git
给Git仓库添加.gitignore:清理、删除、排除被Git误添加的临时文件
本文介绍了如何为Git仓库添加`.gitignore`文件来排除不需要跟踪的临时文件,并展示了如何删除已经被提交的临时文件缓存,以清理Git仓库中的不必要文件。
585 0
给Git仓库添加.gitignore:清理、删除、排除被Git误添加的临时文件
|
6月前
|
开发工具 git iOS开发
服务器配置Huggingface并git clone模型和文件
该博客提供了在服务器上配置Huggingface、安装必要的工具(如git-lfs和huggingface_hub库)、登录Huggingface以及使用git clone命令克隆模型和文件的详细步骤。
582 1
|
7月前
|
开发工具 git
git如何不上传指定的文件或文件夹
【7月更文挑战第9天】平时写代码的时候有很多测试文件或者静态文件,没必要上传到git上,不仅占资源更新还麻烦,以下介绍如何忽略不需要上传的文件或文件夹。
536 8

相关实验场景

更多