当前位置:  开发笔记 > 编程语言 > 正文

Git存储库内部格式解释

如何解决《Git存储库内部格式解释》经验,为你挑选了1个好方法。

有没有关于Git如何在其存储库中存储文件的文档?我试图通过互联网搜索,但没有可用的结果.也许我正在使用不正确的查询或者这可能是一个很大的秘密 - Git存储库内部格式?

让我解释一下,为什么我需要这个火箭科学信息:我正在使用C#来获取文件历史表格存储库.但是在libgit2sharp图书馆里,目前尚未实施.所以(作为一个负责任的人;)我需要自己实现这个功能,并为社区做出贡献.

但是在将内核源代码移动到github后,我甚至不知道从哪里开始搜索.

提前谢谢了!



1> Noufal Ibrah..:

存储库的内部格式非常简单.Git本质上是一个内容可寻址的用户空间文件系统.

这是一个缩略图.

对象

Git将其内部数据结构存储为对象.有四种对象:blob(有点像文件),树(有点像目录),提交(特定时间点文件系统的快照以及如何到达那里的信息)和标签(指向提交的指针)用于标记重要的).

如果查看.git存储库的目录,您将找到objects包含SHA-1哈希命名的文件的目录.它们中的每一个都代表一个对象 您可以使用plumbing git cat-file命令检查它们.来自我的某个存储库的示例提交对象

noufal@sanitarium% git cat-file -p 7347addd901afc7d237a3e9c9512c9b0d05c6cf7
tree c45d8922787a3f801c0253b1644ef6933d79fd4a
parent 4ee56fbe52912d3b21b3577b4a82849045e9ff3f
author Noufal Ibrahim  1322165467 +0530
committer Noufal Ibrahim  1322165467 +0530

Added a .md extension to README

您还可以在此处查看对象本身.git/objects/73/47addd901afc7d237a3e9c9512c9b0d05c6cf7.

你可以检查这样的其他对象.每个提交指向表示该时间点的文件系统的树,并且具有一个(或者在合并提交的情况下更多)父.

对象作为单个文件存储在objects目录中.这些被称为松散物体.运行时git gc,将无法再访问无法访问的对象,并将其余对象打包到一个文件中并进行增量压缩.这样可以提高空间效率并压缩存储库.运行gc后,您可以查看.git/objects/pack/目录以查看git packfiles.要解压缩它们,可以使用plumbing命令git unpack-objects命令.该.git/objects/info/packs文件包含当前存在的包文件列表.

参考

您需要知道的下一件事是什么参考.这些是指向某些提交或对象的指针.您的分支和其他此类内容将作为参考实现.有两种"真实"(它们类似于文件系统中的硬链接)和"符号"(它们是指向真实引用的指针 - 如符号链接).

它们位于.git/refs目录中.例如,在上面的存储库中,我在master分支上.我最近的提交是

noufal@sanitarium% git log -1
commit 7347addd901afc7d237a3e9c9512c9b0d05c6cf7
Author: Noufal Ibrahim 
Date:   Fri Nov 25 01:41:07 2011 +0530

    Added a .md extension to README

您可以看到我的master引用位于.git/refs/heads/master此提交的位置.

noufal@sanitarium% more .git/refs/heads/master
7347addd901afc7d237a3e9c9512c9b0d05c6cf7

当前分支存储在HEAD位于的符号引用中.git/HEAD.这里是

noufal@sanitarium% more .git/HEAD
ref: refs/heads/master

如果你切换分支,它会改变.

类似地,标签也是这样的引用(但它们不像分支那样是可移动的).

整个存储库仅使用提交的DAG(每个提交指向一个表示某个时间点的文件的树)进行管理,并且引用指向DAG上的各种提交,以便您可以操作它们.

进一步阅读

我有一个演示文稿,我在这里用我的git培训解释了其中的一些.

http://book.git-scm.com/上的社区书籍有一些关于内部的部分.

斯科特·查孔的Pro Git的书中有一个章节内部

他还有一个关于内部的窥视代码PDF.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有