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

gas*_*ser 4 git gitolite

我想从git stores提交历史记录的文件中读取,将每个提交信息存储在项目的数据库中,并在项目视图中显示所有历史记录

Mar*_*air 13

没有单个文件可以查询以获取提交历史记录.git的对象模型有很多很好的解释(例如计算机科学家的git,Pro Git,git社区书籍),但在这里快速解释可能是有用的:

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

  • blobs(文件) - 只是二进制文件
  • (目录) - 树是其他对象(通常是blob和树)的列表,包含它们的名称,哈希和一组有限的权限
  • 提交(版本) - 每个提交包括其父提交的哈希,作者,提交消息和其他元数据

其中每个都由其内容的哈希标识,并且此哈希称为对象名称 - 这些是您在使用git的过程中可能看到的40位十六进制字符串.每个对象都存储在.git/objects/目录中,可以是松散对象(每个文件一个),也可以是存储在包文件中的有效对象之一.该文件.git/HEAD表示存储库当前所处的版本,通常包含对特定分支的引用,由.git/refs/heads存储在pack文件中的文件或引用表示.(HEAD也可以直接指向特定提交的对象名称.)其中一个表示分支的文件,例如.git/refs/heads/master,只包含一个对象名称.

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


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

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