Git 实现原理,你真的了解吗?

Git 的原理 文章目录什么是 Git?版本库是由什么构成的版本库(项目文件夹)的构成版本库(对象数据库)的结构提交的组成SHA1 算法总结暂存区什么样的文件,不应该上传到版本库中?查看暂存区清空暂存区选择性提交版本库管理版本的回滚、复原分支为什么有分支的存在?分支管理:创建、合并、变基创建与删除分支合并分支变基标签(tags)创建标签标签的管理与作用版本库的交互创建克隆版本库裸版本库版本库之间的版本分享抓取 Fetch 操作Pull = Fetch + MergePushGithub思考题 什么是 Git? Git 是一 阅读详情

诞生的原因

最初版本的git 诞生于Linus和他的团队在开发Linux内核的过程中。一开始,Linus和他的团队选用的版本控制工具是BitKeeper(一款非开源,但是有条件免费的产品)。但后来由于种种原因BitKeeper宣布终止免费,当时市面上也没有能满足Linux内核开发所需要的分布式版本控制系统,Linus为了解决这一问题,闭关一周,独自设计编写了初版git。

名字含义

Linus本人对git这一名字的解读是愚蠢的内容追踪器(the stupid content tracker),git在俚语中表示的是愚蠢这一类的贬义词。比较受人欢迎的解释应该是全局信息追踪器(Global Information Tracker)。

Git实现原理

初始化一个git仓库,此时文件夹中只有一个隐藏文件夹 .git , .git 文件夹为git的版本库,存放git实现版本控制所需要的全部信息。使用 find .git 命令查看 .git 中存储的内容如下:

下文将围绕上图中的文件目录展开介绍(由于仓库初始化,index文件,COMMIT_EDITMSG文件以及logs文件夹等没有在上图中显示)。

config

config文件记录项目的配置,如下图:

更改配置时,也可以直接对config文件中的内容进行修改。如果某个git仓库中的config文件配置与全局配置冲突,以该仓库配置文件为准。例:

objects(对象库)

对象库(objects)中包含该仓库的原始文件数据。

可寻址内容名称

Git对象库被组织及实现成一个内容寻址的存储系统。具体而言,对象库中的每个对象都有一个唯一的名称,这个名称是向对象的内容应用SHA1得到的SHA1散列值(一个对象的完整内容决定了这个散列值)。

实例展示:

初始时,仓库中有已提交的 file01.txt 以及 file02.txt 文件:

根据类型来分,对象库中的数据可以分为以下三类:

  1. 块(blob)

git仓库中的每个文件的每一个版本表示为一个块。每个块被视为一个黑盒。一个块保存一个文件的数据,但不包含任何关于这个文件的元数据,甚至连文件名也没有。如下图:

  1. 目录树(tree)

一个目录树对象代表一层目录信息。它记录blob标识符、路径名和在一个目录里所有文件的一些元数据。它也可以递归引用其他目录树或子树对象,从而建立一个包含文件和子目录的完整层次结构。如下图:

  1. 提交(commit)

一个提交对象保存版本库中每一次变化的元数据,包括作者、提交者、提交日期和日志消息。每一个提交对象指向一个目录树对象。如下图:

上图展示的例子中,提交为master分支的首次提交,对于非首次提交,commit对象还会记录parent信息,即本次commit所对应的上一次提交。三者关系对应图示如下:

git追踪内容

当Git放置一个文件到对象库中的时候,它基于文件内容计算散列值而不是文件名。事实上,Git并不追踪那些与文件次相关的文件名或者目录名。如果两个文件的内容完全一样,无论是否在相同的目录,Git在对象库里只保存一份blob形式的内容副本。Git仅根据文件内容来计算每一个文件的散列码,如果文件有相同的SHA1值,它们的内容就是相同的,然后将这个blob对象放到对象库里,并以SHA1值作为索引。项目中的这两个文件,不管它们在用户的目录结构中处于什么位置,都使用相同的对象指代其内容。

实例展示:

初始时,仓库中只有一个已提交的 file01.txt 文件:

上述过程的图示变化如下:

如果这些文件中的一个发生了变化,Git会为它计算一个新的SHA1值,识别出它现在是一个不同的blob对象,然后把这个新的blob加到对象库里。原来的blob在对象库里保持不变,给没有变化的文件使用。其次,当文件从一个版本变到下一个版本的时候,Git的内部数据库有效地存储每个文件的每个版本,而不是它们的差异。因为Git使用一个文件的全部内容的散列值作为文件名,所以它必须对每个文件的完整副本进行操作。

存储机制

Git使用了一种叫做打包文件(packfile)的存储机制。当版本库中有太多的松散对象(Git 最初向磁盘中存储对象时所使用的格式被称为“松散(loose)”对象格式),或者你手动执行 git gc 命令,以及你向远程服务器push时,Git 都会将这些松散对象打包成一个称为“包文件(packfile)”的二进制文件。要创建一个打包文件,Git首先定位内容非常相似的全部文件,然后为它们之一存储整个内容。之后计算相似文件之间的差异并且只存储差异。因为Git是由文件内容驱动的,所以它并不关心计算出来的两个文件之间的差异是否属于同一个文件的两个版本。也就是说,Git可以在版本库里的任何地方取出两个文件并计算差异,只要它认为它们足够相似来产生良好的数据压缩。(Git有一套相当复杂的算法来定位和匹配版本库中内容相似的文件)

实例展示:

初始时,仓库中只有一个已提交的大小为12215字节的 file01.txt 文件:

在打包前,objects/pack和objects/info文件夹为空,文件以松散对象的形式存储在objects目录下。打包后,文件全部打包到 objects/pack 中。pack后缀文件存储对象文件,idx后缀文件是索引文件,用于允许它们被随机访问。objects/info 文件夹记录对象存储的附加信息,info/pack文件中记录打包文件的文件名(上图中为:P pack-c4750e76b36c227...idx)。

index(索引)

了解索引之前先说一下git的三个工作区域以及git仓库中文件的三个状态。

三个工作区域

1. 版本库(repository)

即上文中提到的 .git 文件夹。

2. 工作目录(working directory)

工作区即当前分支所对应的文件目录。

3. 暂存区(staging area)

在工作目录与仓库之间还有一个暂存区。当我们在工作目录中对文件进行增删改等操作时,这些被修改的内容在 git add 命令之后,就会被添加到暂存区中。git commit 之后,将暂存区中的内容添加到版本库中(进入对象库中)。三个工作区域交互如下图:

文件分类

Git将所有文件分成3类:已追踪的、被忽略的以及未追踪的。

1. 已追踪的(Tracked)

已追踪的文件是指已经在版本库,或者是在暂存区中的文件。

2. 被忽略的(Ignored)

被忽略的文件是指在工作目录中出现,但git并不记录该文件(夹)的变动。被忽略的文件(夹)必须在版本库中被明确声明为不可见或被忽略,即 .gitignore 文件中声明的文件(夹)。.gitignore 文件的格式如下: - 空行会被忽略,而以井号(#)开头的行可以用于注释。然而,如果#跟在其他文本后面,它就不表示注释了。

  - 一个简单的字面置文件名匹配任何目录中的同名文件。

  - 目录名由末尾的反斜线(/)标记。这能匹配同名的目录和子目录,但不匹配文件或符号链接。

  - 包含shell通配符,如星号(*),这种模式可扩展为shell通配模式。正如标准shell通配符一样,因为不能跨目录匹配,所以一个星号只能匹配一个文件或目录名。

  - 起始的感叹号(!)会对该行其余部分的模式进行取反。此外,被之前模式排除但被取反规则匹配的文件是要包含的。取反模式会覆盖低优先级的规则。

此外,Git允许在版本库中任何目录下有 .gitignore 文件,每个文件都只影响该目录及其所有子目录。.gitignore 的规则也是级联的:可以覆盖高层目录中的规则。为了解决带多个 .gitignore 目录的层次结构问题,也为了允许命令行对忽略文件列表的增编,Git按照下列从高到低的优先顺序对文件进行忽略:- 在命令行上指定的模式( git update-index )

  - 从与文件在相同目录的 `.gitignore` 文件中读取的模式 

  - 上层目录中指定的模式(最接近当前目录的上层目录的模式优先于更上层的目录的模式) 

  - 来自 `.git/info/exclude` 文件的模式 

  - 来自配置变量core.excludedfile指定的文件中的模式。
3. 未追踪的(Untracked)

未追踪的文件是指那些不在前两类中的文件。Git把工作目录下的所有文件当成一个集合,减去已追踪的文件和被忽略的文件,剩下的部分作为未追踪的文件。在工作目录下新建的文件也是未追踪文件。

索引用来定位暂存区以及版本库中的文件。当对工作目录下未追踪文件或新的修改执行 git add 时,这些内容会被以blob对象的形式存入对象库中,同时,index文件(二进制文件)记录这些blob对象与文件的对应关系。

实例展示:

初始时,仓库中只有一个新建未提交的 file01.txt 文件:

对文件作出修改并将修改添加到暂存区后,index文件变更对应关系:

HEAD、refs

HEAD文件记录当前工作目录所对应的git分支,refs文件夹记录分支以及tag(tag指向某一次commit,用来给开发分支做一个标记,以便后续回退)。

实例展示:

初始时,仓库中有已提交的 file01.txt 以及 file02.txt 文件:

切换分支并提交新的commit后:

在分别给两次commit打上tag后:

上述过程对应图示如下:

info

info目录下只有exclude文件,其作用与 .gitignore 功能类似。他们的区别在于 .gitignore 这个文件本身也是存储在对象库中,用来保存的是公共需要排除的文件;而exclude文件中设置的则是本地需要排除的文件,不会影响到其他人。

description

description文件中的内容用于GitWeb。GitWeb是Git提供的 CGI 脚本,让用户在web页面查看git内容。如果我们要启动 GitWeb,可用命令 git instaweb --httpd=webrick 。这个命令在本地启动了一个监听 1234 端口的 HTTP 服务器,并且自动打开了浏览器。想要关闭GitWeb,只需要在启动命令的末尾加上 --stop 。打开的浏览器页面如下:

上图中description字段对应的内容就是 .git/description 文件中记录的内容。

hooks

hooks目录下的文件如下:

Git 能在特定的动作发生时触发自定义脚本,这些脚本(钩子)都被存储在 hooks子目录中。如上图,这些示例文件的名字都是以.sample结尾,如果想启用这些钩子,得先移除sample后缀。把一个正确命名(不带扩展名)且可执行的文件放入hooks子目录中,即可激活该钩子脚本。这样一来,它就能被 Git 调用。

COMMIT_EDITMSG

COMMIT_EDITMSG文件记录本地最后一次commit对应的message。

logs

logs文件夹用来记录操作信息,它的目录如下:

HEAD文件记录所有分支上的操作信息:

refs/heads/branch-name(分支名称)文件记录对应分支上的操作信息:


Git 底层原理 文章目录@[toc]一.git 介绍一.git 简介二.git 历史三.集中式与分布式四.git 大致结构二..git 目录结构三.git add 与 git commit 简单原理四.创建与合并分支简单原理五.git rebase 简单原理六.开始从底层入手 git七.git add 命令底层原理八.git add 和 git commit 中间的操作(tree 对象的生成)九.git comm... 阅读详情

相关推荐

Git实现原理解密

对Git的实现原理的了解可以加深对Git使用的理解,也更容易找到Git使用中出现的问题的解决方法。 git init/clone 命名初始库的时候,会创建.git 隐藏目录 如果不需要git ,直接删除.git 目录即可。对源代码文件无侵入 文件 index:索引文件,二进制。在git add时,会创建一个对象并且与控管文件的路径进行映射,存放到index文件中,后面找文件的时候就通过这个文件。相当与图书的目录,按图索骥。 HEAD:文本文件。记录当前指向的分支 config:仓库的配置文件,保存远程

oscar999的专栏 1409

git 原理简介

文章目录关于版本控制分为三种版本控制方案本地版本控制集中化的版本控制分布式版本控制 关于版本控制 什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。 作用: 如果你是位图形或网页设计师,可能会需要保存某一幅图片或页面布局文件的所有修订版本(这或许是你非常渴望拥有的功能),采用版本控制系统(VCS)是个明智的选择。 有了它你就

安梓晨的博客 8068

SAP FB03凭证修改实战:巧用BAPI FI_DOCUMENT_CHANGE更新抬头与行项目

本文详细介绍了SAP FB03凭证修改的实战技巧,重点解析了BAPI FI_DOCUMENT_CHANGE的使用方法。通过该接口,用户可以在不冲销原凭证的情况下直接更新抬头文本(BKTXT)和行项目文本(SGTXT),确保凭证编号连续且符合审计要求。文章包含核心机制解析、完整实现步骤、错误处理方案以及高级应用场景,帮助开发者高效完成SAP财务凭证修改。

weixin_29251567的博客 424

git实现原理(从常见的操作来解释git的底层原理,再也不怯)

了解了git原理,就可以在使用git时更加得心应手

Java新生代 5384

如何加载交易策略EA到MT4/MT5

1、打开MT4/MT5软件 2、首先,必须有一个EA,而且必须是mq4/ex4为扩展名。点击左上角“文件”—“打开数据文件夹”,找到安装路径 3、将EA的ex4或mq4文件放到MT4目录\MQL4\Experts里面(本文以名为Demo的EA为例) 4、如果有DLL库文件,复制到experts目录下的libraries子目录中 5、如果有tpl模板文件,复制到templates目录中 6、添加完成后重启MT4,点击允许EA运行图标 7、在导航中找到刚才安装的EA,拖拽到...

weixin_41364817的博客 7359

立创开源PEX88048 8盘位M.2扩展卡硬件设计与PCIE4.0交换机应用解析

本文详细解析了基于Broadcom PEX88048 PCIe 4.0交换芯片的8盘位M.2扩展卡硬件设计。文章深入探讨了核心芯片选型、关键供电与安全设计、引脚配置、固件刷写方法,并重点剖析了PCIe 4.0时钟架构与高速PCB布局的核心思想,旨在帮助开发者理解如何设计高性能、高可靠性的存储扩展方案,并有效控制成本。

weixin_28949937的博客 617

Git 工作原理

Git 工作原理GIt简介Git 的基本原理Git的目录结构Git对象在之前我们提到过,Git是一套内容寻址(content-addressable)文件系统,那么Git是怎么进行寻址呢?Git对象的类型包括:==BLOB、tree对象、commit对象==。对象暂存区index文件创建树节点Commit对象提交树Commit Tree第二次提交第三次提交Git的常用命令Git logGit forkGit rebaseGit resetGit revertGit stash总结 GIt简介 Git和SVN

weixin_44684812的博客 3256

Potplayer + LAVFilters + madVR 配置教程

文章目录Potplayer + LAVFilters + madVR 配置教程工具安装篇设置调教1.potplayer播放器设置加载LAVFilters和madVR1.选择“源滤镜/分离器”选项,选择“滤镜/解码器管理”2.“添加外部滤镜”3.浏览到刚才LAVFilters解压的文件夹,分别添加图示项。4.添加后回到管理界面设置,点击左边的”LAV AudioDecoder”,将右边”音频解码器”...

re 16万+

Git有这一篇就够了

在日常工作中,经常会用到Git操作。但是对于新人来讲,刚上来对Git很陌生,操作起来也很懵逼。本篇文章主要针对刚开始接触Git的新人,理解Git的基本原理,掌握常用的一些命令。 一、Git工作流程 以上包括一些简单而常用的命令,但是先不关心这些,先来了解下面这4个专有名词。 Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓

perry_Fan 4940

小白跑WRF第五天,安装WPS和静态地理数据

小白跑WRF第四天,安装WPS一、WPS简介二、下载和安装WPSV4.0第一步、进入Build_WRF文件夹第二步、下载WPSV4.0第三步、解压WPS安装包第四步、修改intmath.f(必须执行)第五步、安装WPS三、修改namelist.wps 一、WPS简介 二、下载和安装WPSV4.0 第一步、进入Build_WRF文件夹 cd Build_WRF 第二步、下载WPSV4.0 下载WPSV4.0的安装包有以下三种方式: 利用Linux命令下载。 进入网站https://www2.mmm.uca

weixin_42372313的博客 2万+

从 VL02N 拣配到 ABAP 自动化,读懂 SD_DELIVERY_UPDATE_PICKING 的位置和风险

文章摘要:SAP SD模块中,SD_DELIVERY_UPDATE_PICKING函数模块用于处理出库交货单的拣配确认,更新交货项目的拣配数量。该函数适用于未启用WM/EWM的传统SD流程,能确保拣配状态与标准交货处理逻辑同步,比直接修改数据库更安全。但在S/4HANA Cloud等新环境中,应优先使用API_OUTBOUND_DELIVERY_SRV等公开发布接口。使用该函数时需注意参数完整性和按交货单整体处理的原则,避免逐项提交导致的数据不一致问题。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 245

Git 天天用 但是 Git 原理你了解吗?

Git 原理 做技术一定要知其然知其所以然,意思就是:知道它是这样的,更知道它为什么是这样的。我主要通过4块内容来简单介绍 Git 是原理是什么样的。这4块内容如下: Git 存储目录结构介绍 Git 是如何存储的 Git 的对象 Git引用 当然 Git 原理不仅仅包含这些,想要更深入了解请查看官方教程 https://git-scm.com/book/zh/v2/。 本文内容是我在 Git...

程序员小奎的博客 11万+

AI驱动的网络安全运维:智能化时代的安全保障

本项目旨在使用Python和AI技术构建一个智能化的网络安全运维系统,能够实时监测网络流量,检测潜在的安全威胁,并自动采取应对措施,从而提升网络安全管理的效率和准确性。具体内容包括:环境配置与依赖安装数据采集与预处理机器学习模型构建与训练实时威胁检测与响应实际应用案例通过本文的介绍,我们展示了如何使用Python和AI技术构建一个智能化的网络安全运维系统。

Echo_Wish 1290

Git存储原理及部分实现

手把手教你理解轮子之git当年他陈刀仔,能用20块赢到 3700万,今天我卢.....Sry,串台了当年他linus 能用两个星期写完Git, 今天我叶某人.... (好吧,当场给linus跪下)前言本文试图理解git的原理,重写部分git命令,从最底层的几个命令开始,听起来很离谱,做起来也很离谱,但是真正去做了,发现,诶,好像没有那么离谱。俗话说得好(我也不知道哪里来的...

奇舞周刊 708

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

你真的了解GIT吗(笑)

本文深度解析Git的底层原理与高级特性。Git作为分布式版本控制系统,其核心设计理念包括快照存储机制和内容寻址文件系统。文章详细介绍了Git的四种基本对象类型(Blob、Tree、Commit、Tag)及其存储机制,以及引用机制(分支、标签、HEAD)。此外,还探讨了Git分布式架构的优势和数据同步方式,包括多种网络协议和合并策略。最后,文章揭示了一些高级功能如Reflog(恢复误操作)、Bisect(定位问题提交)、Worktrees(并行开发)等,这些特性大大增强了Git的实用性和灵活性。

showhard的博客 1020

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

GIT命令只会抄却不理解?看完原理才能事半功倍!

上一次,我们简单介绍了为什么要用版本管理,以及怎么安装Git以及基本认识,为新手朋友们迈出了实操的第一步。而本期的内容其实笔者犹豫了很久,到底是先讲GIT的模型和原理,还是直接讲GIT常用命令? 最终笔者决定还是先从模型与原理下手,不仅是它是命令的前提,而且笔者发现虽然很多用GIT,但只限于几个常用命令,对其运行机制却知之甚少,一旦出现问题,就容易束手无策了,难以处理,所以本期我们还是先讲讲GIT的基础原理吧

战斧的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一文带你详细了解git rebase和git merge原理以及使用场景

和只会影响当前分支,它们操作的是本地的master分支,不会自动从远程拉取更新。如果需要从远程获取更新,你需要手动执行或以确保本地的master分支是最新的。是将master分支的更改应用到feature分支的过程,通常是为了确保feature分支的开发基于master分支的最新修改。如果你正在进行开发并想保持分支的线性历史,使用rebase操作是一个有效的策略。(在feature分支上执行)是将feature分支的更改应用到master分支上。(在 IDEA 中执行)是将master。

yxg520s的博客 1314

git原理学习记录:从基本指令到背后原理,实现一个简单的git

一开始我还担心 git 的原理会不会很难懂,但在阅读了官方文档后我发现其实并不难懂,似乎可以动手实现一个简单的 git,于是就有了下面这篇学习记录。 本文的叙述思路参照了官方文档Book的原理介绍部分,在一些节点上探讨代码实现,官方文档链接。 看完本文你能:1. 了解 git 的设计思想。2. 收获一点快乐? 编程语言选择了 go,因为刚学不太熟悉想多使用一下。 这是我的仓库地址,但如果你和我一样是初学,直接看代码可能不能快速上手,推荐顺着文章看。 迷你git实现–链接 如果文章看得吃力可以跟着官方.

weixin_63930079的博客 410

Git 天天用,但是 Git 原理你了解吗?不进来了解一下?

  前言   做技术一定要知其然知其所以然,意思就是:知道它是这样的,更知道它为什么是这样的。我主要通过4块内容来简单介绍 Git 原理是什么样的。这4块内容如下:   Git 存储目录结构介绍Git 是如何存储的Git 的对象Git引用   首先我们先从 Git 存储目录说起,通过 git init 创建一个空的 Git 仓库,具体操作如下图:      创建完成后进入 .git 目录,如下图所示:      hooks 该目录用于配置 客户端执提交操作用于触发服务端的脚本配置,一般

linjingyg的博客 236

git 怎么查看commit但未push的内容_Git 天天用,但是 Git 原理你了解吗?不进来了解一下?...

前言做技术一定要知其然知其所以然,意思就是:知道它是这样的,更知道它为什么是这样的。我主要通过4块内容来简单介绍 Git 原理是什么样的。这4块内容如下:Git 存储目录结构介绍Git 是如何存储的Git 的对象Git引用当然 Git 原理不仅仅包含这些,想要更深入了解请查看官方教程 https://git-scm.com/book/zh/v2/。本文内容是我在 GitChat 分享关于Git 的...

weixin_33269743的博客 8007

Git图谱了解

网上git图谱相关介绍比较少,自己又比较懒,特转载一篇。 转载地址:https://www.jianshu.com/p/d3d575799ff3,感谢原作者。 下面是转载内容: 什么是Git图谱? Git图谱常见于Git图形化客户端工具(包括SourceTree、Tortoise等)中,利用不同颜色的点、线结合时间轴按照一定规律,呈现项目的版本演进记录。 SourceTree中的Git图谱 TortoiseGit中的Graph 这两张图片分别是SourceTree和Tortois.

沙漠飞鱼的博客 1176

你真的了解git的分支管理跟其他概念吗?

现在前端要学的只是太多了,你是不是有时会有这个想法,如果我有两个大脑。一个学Vue,一个学React,然后到最后把两个大脑学的知识再合并在一起,这样就能省时间了。 哈哈,这个好像不能实现。现实点吧!年轻人。那么我们刚才那个想法就是分支的原理。 你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上继续敲代码,想提交就提交,直到开发完毕后,再一次性合并到原来的分支...

主要领域:前端开发 2581

这才是真正的Git——Git内部原理了解

近几年技术发展十分迅猛,让部分同学养成了一种学习知识停留在表面,只会调用一些指令的习惯。我们时常有一种“我会用这个技术、这个框架”的错觉,等到真正遇到问题,才发现事情没有那么简单。而Git也是一个大部分人都知道如何去使用它,知道有哪些命令,却只有少部分人知道具体原理的东西。了解一些底层的东西,可以更好的帮你理清思路,知道你真正在操作什么,不会迷失在Git大量的指令和参数上面。这里会用一个简单的例子让大家直观感受一下git是怎么储存信息的。首先我们先创建两个文件 Git会将整个数据库储存在.git/目录下

JavaMonsterr的博客 253

深入了解 Git 原理

深入了解 Git 原理 本文推荐的URL链接为同事整理分享的内容。 https://docs.google.com/presentation/d/1v5UXnVTSyzNi_lzfS0GGRBtqpG0_NpzNTjVX70fEkzs/edit

吖脖(博) 684
上一篇: 在 B 站学编程,真滴牛逼!
下一篇: 给力!微软官方发布新的文件恢复工具
编程IT圈
博客等级 码龄6年 1130粉丝 544原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值