Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 提交是否作为文件实现?_Git - Fatal编程技术网

Git 提交是否作为文件实现?

Git 提交是否作为文件实现?,git,Git,在关系数据库系统中,表通常实现为文件,或者数据库很少实现为文件 Git可以看作是一个数据库系统。在Git中,什么实现为文件:blob、树、提交、存储库 Git存储库是文件的集合,“对象”是打包文件(压缩)或松散文件(未压缩文件)。 见“”: 如中所述: 您将在Git中到处看到这些散列值,因为它使用它们太多了。事实上,Git不是通过文件名而是通过其内容的散列值来存储数据库中的所有内容 Git目录是Git存储项目元数据和对象数据库的地方。这是Git最重要的部分,也是从另一台计算机克隆存储库时复制的内

在关系数据库系统中,表通常实现为文件,或者数据库很少实现为文件


Git可以看作是一个数据库系统。在Git中,什么实现为文件:blob、树、提交、存储库

Git存储库是文件的集合,“对象”是打包文件(压缩)或松散文件(未压缩文件)。
见“”:

如中所述:

您将在Git中到处看到这些散列值,因为它使用它们太多了。事实上,Git不是通过文件名而是通过其内容的散列值来存储数据库中的所有内容

Git目录是Git存储项目元数据和对象数据库的地方。这是Git最重要的部分,也是从另一台计算机克隆存储库时复制的内容

工作树是项目一个版本的单个签出。这些文件从Git目录中的压缩数据库中取出,放在磁盘上供您使用或修改

注意:Git本身的第一次提交()提到:

有两种对象抽象:“对象数据库”和 “当前目录缓存”

对象数据库实际上只是一个可寻址的内容集合 对象的名称。
所有对象都是根据其内容命名的,其内容近似于对象本身的SHA1散列。
对象可以引用其他对象(通过引用它们的SHA1散列),因此您可以建立对象的层次结构

内容可寻址集合中有几种类型的对象 数据库它们都是用zlib放气的,并且从标签开始 数据的类型和大小信息。
SHA1哈希始终是压缩对象的哈希,而不是原始对象的哈希


Git存储库是文件的集合,“对象”是打包文件(压缩)或松散文件(未压缩文件)。
见“”:

如中所述:

您将在Git中到处看到这些散列值,因为它使用它们太多了。事实上,Git不是通过文件名而是通过其内容的散列值来存储数据库中的所有内容

Git目录是Git存储项目元数据和对象数据库的地方。这是Git最重要的部分,也是从另一台计算机克隆存储库时复制的内容

工作树是项目一个版本的单个签出。这些文件从Git目录中的压缩数据库中取出,放在磁盘上供您使用或修改

注意:Git本身的第一次提交()提到:

有两种对象抽象:“对象数据库”和 “当前目录缓存”

对象数据库实际上只是一个可寻址的内容集合 对象的名称。
所有对象都是根据其内容命名的,其内容近似于对象本身的SHA1散列。
对象可以引用其他对象(通过引用它们的SHA1散列),因此您可以建立对象的层次结构

内容可寻址集合中有几种类型的对象 数据库它们都是用zlib放气的,并且从标签开始 数据的类型和大小信息。
SHA1哈希始终是压缩对象的哈希,而不是原始对象的哈希

Git可以看作是一个数据库系统

这实际上是一个合理的高级视图。然而,当使用这种方法时,Git至少有两个键值存储(以及一些我们在这里忽略的可选附加键值存储)。一种是采用Git称之为引用的名称,引用具有特殊形式,如分支和标记名,并将它们转换为哈希ID值。另一个数据库获取散列ID键并将它们转换为对象

commit字面上是“commit”类型的对象。每个提交都引用一个(单个)类型为“tree”的对象,它表示保存的快照。树又指附加的子树和/或“blob”对象,它们表示文件内容,或者,对于符号链接,指链接的目标

在Git中,什么是作为文件实现的:blob、树、提交

这里的答案是肯定和否定。因为,这些都只是物体。有四种类型,即我们迄今为止命名的三种类型,加上“注释标记”。每个对象要么作为松散对象存储,在这种情况下,它位于
.git/objects/
目录下的文件中,要么作为打包对象存储。包文件存储在
.git/objects/Pack/
中(至少是成对的文件:一个“包索引”,以及与该索引对应的内容)。一个包文件使用增量编码存储许多对象,因此可以通过提取其他对象的部分来提取对象

(数据包文件的格式很复杂,并且已经进行了多次修订。)

松散对象的文件名是其哈希ID键,用十六进制表示,前两个字母由
/
分隔符从剩余的38个字母中分割,因此给定哈希ID
1234567…
对象存储在
.git/objects/12/34567…

在相对罕见的情况下,可以将同一对象作为松散对象存储在一个或多个包文件中。但是,由于对象的名称是其内容的散列,因此所有副本都应该匹配。当Git对对象进行反压缩时,它会在执行时重新计算哈希值,并声明数据有效,前提是生成的哈希值与Git首先查找对象时使用的键匹配。否则,内容已损坏,可能是由于存储介质故障

(如果任何一个副本损坏,您可以尝试所有其他副本,但通常只转到单独的克隆更容易。Git还将验证每个克隆操作的哈希完整性。Git不会