欢迎访问昆山宝鼎软件有限公司网站! 设为首页 | 网站地图 | XML | RSS订阅 | 宝鼎邮箱 | 后台管理


新闻资讯

MENU

软件开发知识

相比于使用一 CAD加密 种数据结构

点击: 次  来源:宝鼎软件 时间:2018-06-26

原文出处: 彭金金

最近在读《Pro Git》这本书,个中有一章讲Git的内部道理,写得很是好,读完之后对付Git的领略会晋升到一个新的条理。此后,我会写一系列的关于Git内部道理的文章,以辅佐读者加深对Git的认识。内容主要参考《Pro Git》这本书,但差异的是,我会对内容举办从头组织,以使各人更容易领略。

这篇文章的主题的Git工具

从基础上来讲,Git是一个内容寻址的文件系统,其次才是一个版本节制系统。记着这点,对付领略Git的内部道理及其重要。所谓“内容寻址的文件系统”,意思是按照文件内容的hash码来定位文件。这就意味着同样内容的文件,在这个文件系统中会指向同一个位置,昆山软件公司,不会反复存储。

Git工具包括三种:数据工具、树工具、提交工具。Git文件系统的设计思路与linux文件系统相似,即将文件的内容与文件的属性分隔存储,文件内容以“装满字节的袋子”存储在文件系统中,文件名、所有者、权限等文件属性信息则别的开发区域举办存储。在Git中,数据工具相当于文件内容,树工具相当于文件目次树,提交工具则是对文件系统的快照。

下面的章节,会别离对每种工具举办说明。开始说明之前,先初始化一个Git文件系统:

$ mkdir git-test
$ cd git-test
$ git init

接下来的操纵城市在git-test这个目次中举办。

数据工具

数据工具是文件的内容,不包罗文件名、权限等信息。Git会按照文件内容计较出一个hash值,以hash值作为文件索引存储在Git文件系统中。由于沟通的文件内容的hash值是一样的,因此Git将同样内容的文件只会存储一次。git hash-object可以用来计较文件内容的hash值,并将生成的数据工具存储到Git文件系统中:

$ echo 'version 1' | git hash-object -w --stdin
83baae61804e65cc73a7201a7252750c76066a30
$ echo 'version 2' | git hash-object -w --stdin
1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
$ echo 'new file' | git hash-object -w --stdin
fa49b077972391ad58037050f2a75f74e3671e92

上面示例中,-w暗示将数据工具写入到Git文件系统中,假如不加这个选项,那么只计较文件的hash值而不写入;--stdin暗示从尺度输入中获取文件内容,虽然也可以指定一个文件路径取代此选项。

上面讲数据工具写入到Git文件系统中,那如何读取数据工具呢?git cat-file可以用来实现所有Git工具的读取,包罗数据工具、树工具、提交工具的查察:

$ git cat-file -p 83baae61804e65cc73a7201a7252750c76066a30
version 1
$ git cat-file -t 83baae61804e65cc73a7201a7252750c76066a30
blob

上面示例中,-p暗示查察Git工具的内容,-t暗示查察Git工具的范例。

通过这一节,我们可以或许对Git文件系统中的数据工具举办读写。可是,我们需要记着每一个数据工具的hash值,昆山软件开发,才气会见到Git文件系统中的任意数据工具,这显然是不现实的。数据工具只是办理了文件内容存储的问题,而文件名的存储则需要通过下一节的树工具来办理。

树工具

树工具是文件目次树,记录了文件获取目次的名称、范例、模式信息。利用git update-index可觉得数据工具指命名称和模式,然后利用git write-tree将树工具写入到Git文件系统中:

$ git update-index --add --cacheinfo 100644 83baae61804e65cc73a7201a7252750c76066a30 test.txt
$ git write-tree
d8329fc1cc938780ffdd9f94e0d364e0ea74f579

--add暗示新增文件名,假如第一次添加某一文件名,必需利用此选项;--cacheinfo <mode> <object> <path>是要添加的数据工具的模式、hash值和路径,<path>意味着为数据工具不只可以指定纯真的文件名,也可以利用路径。别的要留意的是,利用git update-index添加完文件后,必然要利用git write-tree写入到Git文件系统中,不然只会存在于index区域。

树工具仍然可以利用git cat-file查察:

$ git cat-file -p d8329fc1cc938780ffdd9f94e0d364e0ea74f579
100644 blob 83baae61804e65cc73a7201a7252750c76066a30  test.txt
$ git cat-file -t d8329fc1cc938780ffdd9f94e0d364e0ea74f579
tree