libgit2 - 如何使用 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 直接将所有新对象写入包文件。
解决方案
啊,这样做的方法是使用 mempack 后端。大致:
git_mempack_new
获得一个新的 mempack 后端git_odb_add_backend
将其添加到 odb。使用高优先级值,以便 mempack 被选择用于写入- 对 repo 进行写入
git_mempack_dump
变成一个缓冲区- 然后使用packwriter将buf写成一个pack。
推荐阅读
- javascript - 如何从 React Native 中的两个数组中提取不相同的元素?
- angular - 角度如果传递2个数据的问题
- git - 如何在不每次都下载完整设置的情况下升级到 GIT 最新版本?
- powershell - 如何用单个回车替换多个回车/换行符?
- hibernate - 二级休眠缓存 - 使对象在会话工厂级别可用?
- javascript - Promise 不能解决这个问题
- delphi - 可以拦截对现有已发布属性的读取
- mysql - prolog 在 web 中显示多个 mysql 记录
- go - 如何在没有指数的情况下从 json 的 map[string]interface{} 格式化 int 数?
- python - Window.screenshot 在 iOS 上返回黑屏