我正在尝试使用 libgit2 获取 git 存储库中所有对象 ID 的列表。我似乎找不到任何方法。libgit2 是否有获取所有对象 ID(或遍历它们)的方法,还是我需要手动读取它们?
user142019
问问题
987 次
1 回答
7
您可能正在寻找的是revision walking
API。
编辑: libgit2邮件列表中的一个线程专门处理这个问题。
Vicent Marti(libgit2 维护者)的更准确的回答是
...只需将每个 HEAD 推入助行器即可。你不会得到任何重复的提交。
您所要做的就是将每个分支和标记 oid 推送到修订遍历器中,以递归地遍历提交历史。请注意,这不会检索悬空提交(分支或标签未引用的提交或提交链)。
编辑 2:此行为(类似于git log --all
)已在 libgit2sharp(libgit2 .Net 绑定)中成功实现。
编辑 3:最近合并了一个新功能,它允许枚举存储在对象数据库中的所有对象(提交、树、blob ......)git_odb_foreach()
:.
这将更符合git fsck
@MatrixFrog 所谈论的场景。
于 2011-03-25T16:10:59.387 回答