我正在尝试使用libgit2获取git存储库中所有对象ID的列表。我似乎找不到任何方法。 libgit2是否有方法获取所有对象ID(或迭代它们),还是需要手动读取它们?
答案 0 :(得分:7)
您可能正在寻找的是revision walking
API。
修改: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
场景。
git_odb_foreach()
documentation