[英]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.