我正在编写一个mac应用程序,它允许我只包含包含特定文本的行作为子字符串。基本上我尝试构建源树为其用户提供的功能。在帅哥中划分选定的行。我的选择逻辑是,选择包含特定文本作为子字符串的行。但我无法弄清楚如何用libgit2实现这一目标。
我已经像这样初步化了回购
int error = git_repository_open(&repo, gitRepoString.UTF8String);
然后我正在创建一个工作目录的差异索引,如下所示。
error = git_diff_index_to_workdir(&diff, repo, NULL, NULL);
之后,我可以使用下面的回调函数遍历每个大块中的深渊和线条。
error = git_diff_foreach(diff, each_file_cb,
each_binary_cb,
each_hunk_cb,
each_line_cb,
&d);
并且为大块中的每一行调用回调。
int each_line_cb(const git_diff_delta *delta,
const git_diff_hunk *hunk,
const git_diff_line *line,
void *payload)
{
return 0;
}
现在我意识到我需要以某种方式创建一个补丁,并在差异中添加必要的行到补丁。
任何人都可以指导正确的方向吗?如果libgit2还不允许这样做,是否有任何其他库可以让我这样做。此外,atlassian源代码树似乎也在使用libgit2。他们怎么可能实现这个呢?
顺便说一下,git CLI允许通过本答复中给出的修补来实现。 https://stackoverflow.com/a/32311872/569497答案 0 :(得分:1)
我最终手动实现了这个。事实证明这比我想象的要容易。
我申请大块头的方法:
应该很容易适应只应用特定的行。
我的代码在这里(在Swift中,使用Objective Git):https://github.com/Uncommon/Xit/blob/369dd52d444d4650759c22414121dd2a6be282d2/Xit/XTDiffDelta.swift