我正在尝试挖掘版本控制算法如何对数据进行操作的资源,我对git机制的运行方式特别感兴趣。我意识到git做了很多不同的事情,但特别是我对如何保存和恢复历史感兴趣。我很感激任何人都可以指向的链接或文章参考。谢谢:))
答案 0 :(得分:5)
如果你知道如何使用git及其功能,但你很好奇如何,那么深入了解gitcore-tutorial开始,它会显示哪些对象存储在git仓库中,它如何存储下一个版本,修订版本以及如何手动执行,修订如何连接等等。
此presentation在展示一切如何运作方面也很有帮助。它是由git-scm页面的维护者和github之一的东西创建的,所以他知道他在谈论什么。
答案 1 :(得分:3)
Pro Git书中有一章内容可能会有所帮助。
http://progit.org/book/ch9-0.html
它实际上并没有详细介绍packfile结构,但它非常全面地涵盖了其他所有内容。如果你想了解packfile和pack索引结构,我会详细介绍它here。
页面没有涵盖的唯一内容是实际的delta算法,但实际上并没有覆盖任何地方的afaik。如果你很好奇,我可以解释一下。
答案 2 :(得分:3)
Git的历史(项目)非常简单。 Git是基于概念级别的快照,这意味着在最简单的线性历史情况下项目的历史记录是一系列项目的后续版本。
项目的单个版本由提交对象表示,其中包含有关给定版本(修订版)的整个项目的状态(快照)的信息,版本元数据,如创建comit和作者的日期info和指向零个或多个先前版本的指针,给定一个基于。给定提交的版本称为父提交。因此,对于线性历史记录,它将是提交列表(表示版本/修订版),每个提交但最后一个(有时称为根提交)指向前一个/父提交。还有分支提示指针引用最新提交(给定分支中的最新版本),HEAD表示哪个分支是当前分支。
在更复杂的情况下,历史记录是版本的DAG(有向无环图),其中每个版本由一个提交对象表示,其中有一个或多个父对象指向其他提交对象(其他版本)。 / p>
除了已经推荐的文章,我还想指出另外两篇文章:
答案 3 :(得分:2)
网络上有许多资源,例如this article
答案 4 :(得分:1)
如果你对mercurial感兴趣,可以使用mercurial书is a great ressource。来自OLS的Matt Mackall的original paper也很好。