我正在编写一个 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