libgit2 - 两个文本blob上的diff

时间:2014-04-07 08:56:55

标签: c++ c git libgit2

我想编写类似于" git diff blobish blobish"用libgit2

这是我到目前为止的代码

git_repository* repo;
git_repository_open(&repo, path/to/repository);
git_blob *oldBlob, *newBlob;
git_oid old_oid, new_oid;
const char* oldBlobHash = "92fd12351a4e4d6f10d30516149c624e6b9e3dc9";
git_oid_fromstr(&old_oid, oldBlobHash);
git_blob_lookup(&oldBlob, repo, &old_oid);
const char* newBlobHash = "80bf2770cdbb9580bc040d49775fccd405f534dc";
git_oid_fromstr(&new_oid, newBlobHash);
git_blob_lookup(&newBlob, repo, &new_oid);

git_diff_blobs(oldBlob,
        NULL,
        newBlob,
        NULL,
        NULL,?, ?, ?, ?); //what should I put in the question marks?

.... // how do I continue from here?

当我跑#34; git diff 92fd1235 80bf2770"在命令行上我得到了

diff --git a/92fd12351a4e4d6f10d30516149c624e6b9e3dc9 b/80bf2770cdbb9580bc040d49775fccd405f534dc
index 92fd123..80bf277 100644
--- a/92fd12351a4e4d6f10d30516149c624e6b9e3dc9
+++ b/80bf2770cdbb9580bc040d49775fccd405f534dc
@@ -1 +1 @@
-file1 v2
\ No newline at end of file
+file1 v4
\ No newline at end of file

如何完成我的代码以获得与git相同的输出?

1 个答案:

答案 0 :(得分:4)

git_diff是基于行差异的类型接口,因此您可以使用函数来处理各行和文件。

如果您正在寻找能够为git diff及类似实用程序生成的文本输出的内容,则可以更轻松地浏览git_patch API

你可以打电话

git_patch_from_blobs()

会给你一个git_patch对象,然后你可以传递给

git_patch_to_buf()

将统一差异格式的内容写入git_buf,您可以用它来打印到您想要的任何文件/屏幕。

您也可以通过提供一些回调来手动完成,这些回调会将信息添加到您选择的某些数据结构中,然后您可以转换为统一差异或并排或其他任何数据结构,但对于您提及的用户案例,通过补丁API更容易。