我想编写类似于" 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相同的输出?
答案 0 :(得分:4)
git_diff
是基于行差异的类型接口,因此您可以使用函数来处理各行和文件。
如果您正在寻找能够为git diff
及类似实用程序生成的文本输出的内容,则可以更轻松地浏览git_patch API
。
你可以打电话
git_patch_from_blobs()
会给你一个git_patch
对象,然后你可以传递给
git_patch_to_buf()
将统一差异格式的内容写入git_buf
,您可以用它来打印到您想要的任何文件/屏幕。
您也可以通过提供一些回调来手动完成,这些回调会将信息添加到您选择的某些数据结构中,然后您可以转换为统一差异或并排或其他任何数据结构,但对于您提及的用户案例,通过补丁API更容易。