首页 > 解决方案 > 如何使用 libgit2 将对象直接写入包文件?

问题描述

我有一个工具可以有效地构建一个 git 存储库。我目前正在使用git_commit_create和 treebuilder 之类的函数来构建提交,但是对象总是被写入松散对象而不是包文件中。我尝试使用https://github.com/libgit2/libgit2/issues/4090#issuecomment-274748061中描述的方法- 创建一个新的 odb,添加一个包后端,并将其设置为存储库的 odb,但它失败了写入时出现以下错误:

cannot write object - unsupported in the loaded odb backends

我不清楚如何进行这项工作。似乎应该可以让 API 直接将所有新对象写入包文件。

标签: libgit2

解决方案


啊,这样做的方法是使用 mempack 后端。大致:

  • git_mempack_new获得一个新的 mempack 后端
  • git_odb_add_backend将其添加到 odb。使用高优先级值,以便 mempack 被选择用于写入
  • 对 repo 进行写入
  • git_mempack_dump变成一个缓冲区
  • 然后使用packwriter将buf写成一个pack。

推荐阅读