《Git版本控制管理(第2版)》——4.2 对象库图示

4.2 对象库图示

让我们看看Git的对象之间是如何协作来形成完整系统的。

blob对象是数据结构的“底端”;它什么也不引用而且只被树对象引用。在接下来的图里,每个blob由一个矩形表示。

树对象指向若干blob对象,也可能指向其他树对象。许多不同的提交对象可能指向任何给定的树对象。每个树对象由一个三角形表示。

一个圆圈表示一个提交对象。一个提交对象指向一个特定的树对象,并且这个树对象是由提交对象引入版本库的。

每个标签由一个平行四边形表示。每个标签可以指向最多一个提交对象。

分支不是一个基本的Git对象,但是它在命名提交对象的时候起到了至关重要的作用。把每个分支画成一个圆角矩形。

图4-1展示了所有部分如何协作。这张图显示了一个版本库在添加了两个文件的初始提交后的状态。两个文件都在顶级目录中。同时它们的master分支和一个叫V1.0的标签都指向ID为1492的提交对象。

现在,让我们使事情变得复杂一点。保留原来的两个文件不变,添加一个包含一个文件的新子目录。对象库就如图4-2所示。

就像前一张图里,新提交对象添加了一个关联的树对象来表示目录和文件结构的总状态。在这里,它是ID为cafed00d的树对象。

因为顶级目录被添加的新子目录改变了,顶级树对象的内容也跟着改变了,所以Git引进了一个新的树对象:cafed00d。

然而,blob对象dead23和feeb1e在从第一次到第二次提交的时候没有发生变化。Git意识到ID没有变化,所以可以被新的cafed00d树对象直接引用和共享。

请注意提交对象之间箭头的方向。父提交在时间上来得更早。因此,在Git的实现里,每个提交对象指回它的一个或多个父提交。很多人对此感到困惑,因为版本库的状态通常画成反方向:数据流从父提交流向子提交。

第6章扩展了这些图来展示版本库的历史是如何建立和被不同命令操作的。

时间: 2024-11-05 16:40:51

《Git版本控制管理(第2版)》——4.2 对象库图示的相关文章

《Git版本控制管理(第2版)》——导读

前言 本书是按照一系列渐进式主题进行组织编排的,每一个主题都建立在之前介绍的概念之上.本书前11章讲解的是与一个版本库相关的概念和操作,这些内容是在多个版本库上进行复杂操作(将在本书后10章涉及)的基础. 如果你已经安装了Git,甚至曾经简单使用过,那么你可能用不到前两章中Git相关的介绍性知识和安装信息,第3章的知识对你来说也是可有可无. 第4章介绍的概念是深入掌握Git对象模型的基础,读者可以通过第4章清楚理解Git更为复杂的操作. 第5章-第11章更为详细地讲解了Git的各个主题.第5章讲

《Git版本控制管理(第2版)》——第4章 基本的Git概念 4.1基本概念

第4章 基本的Git概念 4.1 基本概念 前一章介绍了Git的一个典型应用,并且可能引发了相当多的问题.Git是否在每次提交时存储整个文件?.git目录的目的是什么?为什么一个提交ID像乱码?我应该注意它吗? 如果你用过其他VCS,比如SVN或者CVS,那么对最后一章的命令可能会很熟悉.事实上,你对一个现代VCS期望的所有操作和功能,Git都能提供.然而,在一些基本的和意想不到的方面,Git会有所不同. 本章会通过讨论Git的关键架构组成和一些重要概念来探讨Git的不同之处和原因.这里注重基础

《Git版本控制管理(第2版)》——4.3 Git在工作时的概念

4.3 Git在工作时的概念 带着一些原则,来看看所有这些概念和组件是如何在版本库里结合在一起的.让我们创建一个新的版本库,并更详细地检查内部文件和对象库. 4.3.1 进入.git目录首先,使用git init来初始化一个空的版本库,然后运行find来看看都创建了什么文件. $ mkdir /tmp/hello $ cd /tmp/hello $ git init Initialized empty Git repository in /tmp/hello/.git/ # 列出当前目录中的所有

《Git版本控制管理(第2版)》——第1章 介绍 1.1背景

第1章 介绍 1.1 背景 现如今,难以想象有创意的人会在没有备份策略的情况下启动一个项目.数据是短暂的,且容易丢失--例如,通过一次错误的代码变更或者一次灾难性的磁盘崩溃.所以说,在整个工作中持续性地备份和存档是非常明智的. 对于文本和代码项目,备份策略通常包括版本控制,或者叫"对变更进行追踪管理".每个开发人员每天都会进行若干个变更.这些持续增长的变更,加在一起可以构成一个版本库,用于项目描述,团队沟通和产品管理.版本控制具有举足轻重的作用,只要定制好工作流和项目目标,版本控制是最

《Git版本控制管理(第2版)》——1.2 Git的诞生

1.2 Git的诞生 通常来说,当工具跟不上项目需求时,开发人员就会开发一个新的工具.实际上,在软件领域里,创造新工具经常看似简单和诱人.然而,鉴于市面上已经有了相当多的VCS,决定再创造一个却应该是要深思熟虑的.不过,如果有着充分的需求.理性的洞察以及良好的动机,则完全可以创造一个新的VCS. Git就是这样一个VCS.它被它的创造者(Linus,一个脾气急躁又经常爆出冷幽默的人)称作"从地狱来的信息管理工具".尽管Linux社区内部政治性的争论已经淹没了关于Git诞生的情形和时机的

《Git版本控制管理(第2版)》——1.5 名字有何含义

1.5 名字有何含义 据Linus宣称,命名为Git,是因为"我是一个自私的混蛋,我照着自己命名我所有的项目,先是Linux,现在是git"⑤.倘若,Linux这个名字是Linus和Minix的某种结合.那么反用一个表示愚蠢无用之人的英语词汇也不是没可能. 那之后,也有人曾建议,使用一些其他也许更让人舒服的解释.其中最受欢迎的一个就是:全局信息追踪器(Global Information Tracker).

《Git版本控制管理(第2版)》——1.3 先例

1.3 先例 VCS的完整历史已经超出了本书的讨论范围.然而,有一些具有里程碑.革新意义的系统值得一提.这些系统对Git的开发或者有重要的铺垫意义,或者有引导意义.(本节为可选章节,希望能够记录那些新特性出现的时间,以及在自由软件社区变得流行的时间.) 源代码控制系统(Source Code Control System, SCCS)是UNIX②上最初的几个系统之一,由M. J. Rochkind于20世纪70年代早期开发.["The Source Code Control System,&qu

《Git版本控制管理(第2版)》——1.4 时间线

1.4 时间线 有了应用场景,有了一点额外的动力,再加上对新VCS的需求迫在眉睫,Git于2005年4月诞生了. 4月7日,Git从以下提交起,正式成为自托管项目. commit e83c5163316f89bfbde7d9ab23ca2e25604af29 Author: Linus Torvalds <torvalds@ppc970.osdl.org> Date: Thu Apr 7 15:13:13 2005 –0700 Initial revision of "git&quo

分布式版本控制Git分支管理策略及使用规范流程

Git分支管理策略 目前最流行的"版本管理系统",非Git莫属. 相比同类软件,Git有很多优点.其中很显著的一点,就是版本的分支(branch)和合并(merge)十分方便.有些传统的版本管理软件,分支操作实际上会生成一份现有代码的物理拷贝,而Git只生成一个指向当前版本(又称"快照")的指针,因此非常快捷易用. 但是,太方便了也会产生副作用.如果你不加注意,很可能会留下一个枝节蔓生.四处开放的版本库,到处都是分支,完全看不出主干发展的脉络. Vincent Dr