问题描述
我选择了以下拉取算法:
- 获取()
- 获取当前的头部提交
- 获取所有未合并的提交(实现取自此处:How can I check if pull is needed using libgit2 in c++?)
- 从第
3.
步获取第一个未合并的提交(它是最新的) - 合并提交。从 LastFetchedCommit(第 4 步)到 headCommit(第 2 步)。
1-4 完美运行
我有 5 个问题:
git_merge_commits(&rezPointer,repo.pointer,commitFrom.pointer,commitInto.pointer,&mrgOptions)
我正在尝试拉取相对于本地存储库有 2 个额外提交的远程存储库。
错误:
错误域=lib.git_index_write_tree 失败:写入树失败。索引文件未由现有存储库备份 Code=-1 “无法写入树。索引文件未由现有存储库备份” UserInfo={NSLocalizedDescription=无法写入树。索引文件未由现有存储库备份,NSLocalizedFailureReason=git_index_write_tree 失败。}
我做错了吗?
解决方法
这可能如 issue 2668
中所述如果我调用 git_index_write_tree()
,它会因写入树失败而失败。 The index file is not backed up by an existing repository
。
这就是 git_index_write_tree_to()
的用途。
但这不是关于裸与非裸,而是关于您是否向存储库索要索引,或者您是否创建了一个没有任何关联的索引。
有点像在 issue 5015 中,其中显式设置并使用了对索引的引用(没有错误消息):
git_repository *src,*dst;
git_index *index;
git_oid id;
git_libgit2_init();
err = git_repository_open(&src,"src");
err = git_repository_open(&dst,"dst");
err = git_repository_index(&index,src);
err = git_index_write_tree_to(&id,index,dst);