我试图使用libgit2获取git存储库中所有对象ID的列表.我似乎无法找到任何方法. libgit2有一个方法来获取所有对象ID(或迭代它们),还是我需要手动读取它们? 您可能正在寻找的是版本行走
>功能描述可以在here找到.
> test演示不同的步行策略也可能为您提供一些帮助
编辑:libgit2 mailing list中的thread具体处理此问题.
来自Vicent Marti(libgit2维护者)的更精确答案是
… Just push every single HEAD into the the walker. You won’t
get any duplicate commits.
您所要做的就是将每个分支和标记oid推送到修订版步行器中,以递归方式遍历提交历史记录.请注意,这不会检索悬空提交(提交或未被分支或标记引用的提交链).
编辑2:此行为(类似于git log –all)已在libgit2sharp(libgit2 .Net bindings)中成功完成implemented.
编辑3:最近合并了一个新功能,它允许枚举存储在对象数据库中的所有对象(提交,树,blob,…):git_odb_foreach().
这将更符合@MatrixFrog谈论的git fsck场景.
> git_odb_foreach()documentation
> A simple test演示了如何使用API