如何检索所有对象ID?

7 c git libgit2

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

nul*_*ken 7

您可能正在寻找的是revision walkingAPI.

  • 可以在此处找到该功能的描述.
  • 一个测试演示不同的行走策略也可以为你提供一些帮助

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

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

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

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

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

编辑3:一项新功能,最近被合并,这将允许枚举所有对象(犯,树木,斑点,...)存储在对象数据库:git_odb_foreach().

这将更符合git fsck@MatrixFrog所讨论的情景.