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

标签 git gitolite

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

最佳答案

没有您可以通过查询来获取提交历史记录的单个文件。对 git 的对象模型有很多很好的解释(例如 git for computer scientistsPro Gitthe git community book ),但在这里快速解释一下可能会有用:

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

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

其中的每一个都由其内容的散列来标识,这个散列被称为对象名称——这些是您在使用 git 的过程中可能见过的 40 位十六进制字符串。每个对象都存储在 .git/objects/ 目录中,作为松散对象(每个文件一个)或作为有效存储在包文件中的许多对象之一。文件 .git/HEAD 表示您的存储库当前所在的版本,通常包含对特定分支的引用,由 .git/refs/heads 下的文件表示> 或存储在包文件中的引用。 (HEAD 也可能直接指向特定提交的对象名称。)其中一个代表分支的文件,例如 .git/refs/heads/master,只包含一个对象名称。

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


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

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

关于git - git 在哪个文件中存储提交历史记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7461715/

相关文章:

Apache DocumentRoot 的 Gitolite 本地工作副本

git - 配置 GitLab 以将每个用户的存储库存储在个人目录中

linux - 我们如何在每次提交时备份或克隆 GitoLite 服务器

git - 将分支移动到另一台具有远程存储库的笔记本电脑

Git 查找从分支 A 到 B 的最后一次 merge

git - 在 Mac OS X 10.5 上维护更新的 Git 二进制文件(Git by Git)的最佳实践?

linux - dokku 保留应用程序运行时生成的文件

git - 如何告诉 git 为给定项目使用正确的身份(名称和电子邮件)?

node.js - 如何从 npm (Nodejs 0.8.x) 安装 node-gitteh 模块

Git权限被拒绝(公钥),但公钥已添加并正在工作