如何检索所有对象ID?

我试图使用libgit2获取git存储库中所有对象ID的列表。 我似乎无法找到任何方法。 libgit2有一个方法来获取所有对象ID(或迭代它们),还是我需要手动读取它们?

您可能正在寻找的是revision walking API。

  • 可以在此处找到该function的描述。
  • 展示不同步行策略的测试也可能为您提供一些帮助

编辑: libgit2 邮件列表中的一个线程专门处理此问题。

来自Vicent Marti(libgit2维护者)的更精确答案是

……将每一个HEAD推入助行器。 你不会得到任何重复的提交。

您所要做的就是将每个分支和标记oid推送到修订版步行器中,以递归方式遍历提交历史记录。 请注意,这不会检索悬空提交(提交或未被分支或标记引用的提交链)。

编辑2:此行为(类似于git log --all )已在libgit2sharp(libgit2 .Net bindings)中成功实现 。

编辑3:最近合并了一个新function,它允许枚举存储在对象数据库中的所有对象(提交,树,blob,…): git_odb_foreach()

这将更符合@MatrixFrog谈论的git fsck场景。

  • git_odb_foreach() 文档
  • 一个简单的测试,演示如何使用API