问题描述
我正在尝试使用libgit2在git存储库中获取所有对象ID的列表.我似乎找不到任何方法. libgit2是否具有获取所有对象ID(或通过它们迭代)的方法,或者我需要手动阅读它们?
推荐答案
您可能要寻找的是revision walking api.
编辑: a thread a>专门处理这个.
Vicent Marti(Libgit2维护者)的更精确答案是
...只需将每个头推入步行者即可.你不会 获取任何重复提交.
您要做的就是将每个分支机构和标记为修订沃克(Walker),以递归地漫步提交历史记录.请注意,这将不会检索悬挂的提交(分支机构或标签未引用的提交或提交链).
编辑2:这种行为(类似于git log --all)已成功在libgit2sharp(libgit2 .net绑定)中实现.
编辑3:最近合并了一项新功能,允许列举所有存储在对象中数据库:git_odb_foreach().
这将更符合git fsck方案@matrixfrog在谈论.
- git_odb_foreach()
- 一个简单的测试 演示如何使用API