Objective-Git Merge

Cox*_*989 1 git objective-c git-merge libgit2 objective-git

我正在使用Objective-Git.我无法使用以下方法:

- (GTIndex *)merge:(GTTree *)otherTree ancestor:(GTTree *)ancestorTree error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

没有返回错误,但返回的索引为空,当它存在时,所有属性都为零.合并操作不会发生,我无法写出树,因为我无法获得尝试合并产生的索引.

有没有人设法使用目标git成功执行合并 - 如何?救命!

        GTBranch *branch1 = branches[0];
        GTCommit *commit1 = [branch1 targetCommitAndReturnError:NULL];
        GTOID *oid1 =  commit1.OID;
        GTTree *tree1 = commit1.tree;

        GTBranch *branch2 = branches[1];
        GTCommit *commit2 = [branch2 targetCommitAndReturnError:NULL];
        GTTree *tree2 = commit2.tree;
        GTOID *oid2 =  commit2.OID;

        GTRepository *repo = branch1.repository;

        NSError *error;
        GTCommit *ancestor = [repo mergeBaseBetweenFirstOID:oid1 secondOID:oid2 error:&error];
        if (error){
            NSLog(@"%@", error.description);
        }
        GTTree *ancTree = ancestor.tree;
        NSError *someError;
        NSLog(@"attempting merge into ""%@"" from ""%@"" with ancestor ""%@""", commit2.message, commit1.message,ancestor.message);
        GTIndex *mergedIndex = [tree2 merge:tree1 ancestor: ancTree error:&someError];  //returns index not backed by existing repo --> index_file_path = nil,  all attributes of git_index are nil
        if (someError){
            NSLog(@"%@", someError.description);
        }
        NSError *theError;
        GTTree *mergedtree = [mergedIndex writeTree:&theError]; //can't write out the tree as the index given back by merge: ancestor: error: does not reference a repo
        if (theError){
            NSLog(@"%@",theError);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Art*_*ber 5

通过将树合并在一起返回的索引不会绑定到存储库.不幸的是,将索引作为树写入特定存储库(git_index_write_tree_to)的操作尚未通过Objective-Git公开.

您可能希望在其问题跟踪器中打开票证.

  • 确实!您也可以将新索引交换到存储库的索引,但除非您非常小心地确保在索引中没有未提交的跟踪更改,否则可能不建议这样做.(更好地合并两个索引并将结果作为新的存储库索引.) (2认同)