c - git diff 仅一个文件

标签 c libgit2

我发现使用libgit2从单个文件中获取差异的唯一方法是通过git_diff_foreach并在diff_file_cb回调中检查文件名.

这不是我想要的方式,我正在寻找更简单的方法。

还有其他方法可以做到这一点吗?

最佳答案

为了澄清,git_diff_index_to_workdir(或 git_diff_tree_to_tree 或其他此类函数)查找已更改文件的列表,然后 git_diff_foreach 遍历找到的文件文件和差异文本。您可以在 git_diff_index_to_workdir 的选项结构中传递“pathspec”,这将限制正在检查的文件。您将按照之前的答案中提到的那样执行此操作。

作为一个更广泛的示例,如果您想比较一组更复杂的文件,您可以编写如下内容:

git_diff *diff;
git_diff_options opts = GIT_DIFF_OPTIONS_INIT;
char *files[3];

files[0] = "myfile.txt";
files[1] = "yourfile.txt";
files[2] = "some/directory/*.h"

opts.pathspec.count = 3;
opts.pathspec.strings = files;

if (git_diff_index_to_workdir(&diff, repo, NULL, &opts) < 0) {
    printf("Failed to diff\n");
    exit(1);
}

git_diff_foreach(diff, file_cb, NULL, NULL, NULL);

git_diff_free(diff);

您可以根据需要传递任意数量的文件名或文件模式。如果您想禁用模式匹配行为(即扩展 * 等),您可以编写 opts.flags |= GIT_DIFF_DISABLE_PATHSPEC_MATCH 并且仅使用精确的文件名匹配。

关于c - git diff 仅一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20107920/

相关文章:

python - 通过 pygit2 执行 Git 瓷器命令?

ruby - 如何使用 Rugged ruby​​ gem 拉取 git 存储库

git - 如何将自定义对象数据库添加到 libgit2?

c - bash 管道中的 u3-tool 不起作用 | C中的段错误

c - 使用 ffmpeg 或 OpenCV 处理 .Raw 图像

c - 使用头文件修复 GCC 中的编译器错误

c - 计算

c - 非静态变量初始化

branch - 如何使用 libgit2 创建分支

libgit2 - 如何测试凭据是否有效?