繁体   English   中英

libgit2-两个文本Blob的差异

[英]libgit2 - diff on two text blobs

我想用libgit2编写类似于“ git diff blobish blobish”的程序

到目前为止,这是我的代码

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?

当我在命令行上运行“ 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相同的输出?

git_diff是基于行的差异的体裁接口,因此您需要将函数用于处理各个行和文件。

如果您正在寻找可以让git diff和类似实用程序产生文本输出的内容,那么使用git_patch API会更容易。

你可以打电话

git_patch_from_blobs()

这将给你一个git_patch对象,然后可以将其传递给

git_patch_to_buf()

它将以统一的diff格式将内容git_buf ,您可以使用该git_buf打印到所需的任何文件/屏幕。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM