Git Command: Git 的数据使用方式
此文章施工中…
现在让我们来使用上面我们写好的 Git Object 来实现常用的 Git 命令吧.
此文章施工中…
现在让我们来使用上面我们写好的 Git Object 来实现常用的 Git 命令吧.
此文章施工中…
前后顺序均按从低位到高位.
本文先介绍了一些方便查看 Git Object 文件 二进制内容的命令行工具, 其次分别介绍了 4 种 Object: Blob
, Commit
, Tree
, Tag
.
每一种 Object
按"概念模型"与"二进制格式"分隔, 前者主要介绍其储存了那些抽象信息, 后者则专注于其二进制储存格式.
写这篇文章一开始主要是受到了 Write Yourself a Git, 深入理解Git实现原理 这两篇文章的激励. 俗话说学会使用轮子的最佳方法就是造一个轮子(其实是我刚刚说的), 而在使用 Python 实现的过程中又多少碰到了点前面两篇文章没有覆盖到的细节点, 特记录于此, 以飨读者.
本文章介绍顺序是先介绍其存储用的数据结构, 分别按其概念模型(包含了什么信息, 为什么要这样设计)及其二进制格式(储存在文件系统中的格式)来介绍; 随后再描述如何实现 Git 的常用功能.
本文章不是 Git 的教程, 如果读者对 Git 的操作并非十分了解的话可以参考 ProGit, 一本非常好的 Git 教材.
本文对于细节扣得有点多, 可能并不适合只想理解 Git 底层模型的读者.
或者也可以像我一样现学现写.
本文的配套代码及 Markdown 源码一同发布于 GitHub: mgit, 可以配套查看. (顺着 Commit 看我怎么挣扎着理解的说不定别有一番乐趣).
由于作者水平有限, 时间亦有限, 错漏难免, 还请大佬指正.