git在哪个文件中存储提交历史记录?

git在哪个文件中存储提交历史记录?,git,gitolite,Git,Gitolite,我想从git存储提交历史的文件中读取,以将每个提交信息存储在我的项目数据库中,并在我的项目视图中显示所有历史记录。您可以在此处了解git如何存储对象:。阅读该书“内部构件和管道”部分的其他章节,了解其工作原理 本质上,没有“保存提交历史记录的文件”,它比这更复杂。您应该为您选择的语言使用一个现有的API(搜索“git API”和您的语言,有很多)。没有一个文件可以查询以获得提交历史记录。git的对象模型有很多很好的解释(例如),但是在这里快速解释一下可能很有用: git中有各种类型的对象,最重要

我想从git存储提交历史的文件中读取,以将每个提交信息存储在我的项目数据库中,并在我的项目视图中显示所有历史记录。您可以在此处了解git如何存储对象:。阅读该书“内部构件和管道”部分的其他章节,了解其工作原理


本质上,没有“保存提交历史记录的文件”,它比这更复杂。您应该为您选择的语言使用一个现有的API(搜索“git API”和您的语言,有很多)。

没有一个文件可以查询以获得提交历史记录。git的对象模型有很多很好的解释(例如),但是在这里快速解释一下可能很有用:

git中有各种类型的对象,最重要的是:

  • blobs(文件)-仅二进制文件
  • (目录)-树是其他对象(通常是blob和tree)的列表,包括它们的名称、哈希和一组有限的权限
  • 提交(版本)-每次提交都包括其父提交、作者、提交消息和其他元数据的哈希值
其中每一个都由其内容的散列来标识,这个散列被称为对象名——这些是您可能在使用git的过程中看到的40位十六进制字符串。每个对象都存储在
.git/objects/
目录中,可以作为松散对象(每个文件一个)或作为包文件中高效存储的多个对象之一。文件
.git/HEAD
表示存储库当前的版本,通常包含对特定分支的引用,由
.git/refs/heads
下的文件或包文件中存储的引用表示。(
HEAD
也可以直接指向特定提交的对象名。)其中一个表示分支的文件,例如
.git/refs/heads/master
,只包含一个对象名

为了从这个分支提示遍历历史,git将在对象数据库中找到该文件中命名的对象,并递归地跟随指向其父对象的指针


但是,对于您描述的用例(即遍历历史以导出它),我强烈建议您执行以下操作之一:

  • 调用git命令来查找历史记录。如果您坚持使用所谓的“管道”命令,那么它们的输出在git版本中应该是稳定的
  • 使用库查询存储库。libgit2是一个完全可重入的库,用于查询git存储库,它现在有许多语言的绑定

您缺少第四个对象:tags@wilhelmtell:这正是我说“git中有各种类型的对象,最重要的是[…]”的原因。嘿,我在还原提交git时进行搜索,并找到你的答案。我在还原提交git时有一个问题:解密我的提交哈希,然后找到我的文件?