我想用 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
是用于基于行的差异的通用接口(interface),因此您可以放置用于处理各个行和文件的函数。
如果您正在寻找能够为您提供由 git diff
和类似实用程序生成的文本输出的东西,那么通过 git_patch API
会更容易。
你可以调用
git_patch_from_blobs()
这会给你一个 git_patch
对象,然后你可以将其传递给
git_patch_to_buf()
这会将内容以统一的 diff 格式写入 git_buf
,您可以使用它打印到您想要的任何文件/屏幕。
您也可以通过提供一些回调来手动完成,这些回调会将信息添加到您选择的某些数据结构中,然后您可以将其转换为统一差异或并排或其他任何形式,但对于您提到的用户案例,通过补丁 API 就容易多了。
关于c++ - libgit2 - 两个文本 blob 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22907806/