如何检索所有对象ID?

时间:2011-03-09 16:47:15

标签: c git libgit2

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

1 个答案:

答案 0 :(得分:7)

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

  • 可以找到该功能的说明here
  • 展示不同步行策略的test也可能为您提供一些帮助

修改:libgit2 thread中的mailing list专门处理此问题。

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

  

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

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

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

编辑3:最近合并了一项新功能,该功能可以枚举存储在对象中的所有对象(提交,树,blob等)数据库:git_odb_foreach()

这更符合@MatrixFrog所讨论的git fsck场景。