Я хотел бы запрограммировать что-то похожее на "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?
когда я запускаю "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
который вы можете использовать для печати на любом файле/экране, который вы хотите.
Вы также можете сделать это вручную, предоставив некоторые обратные вызовы, которые добавили бы информацию в какую-либо структуру данных по вашему выбору, которую затем можно преобразовать в унифицированный diff или бок о бок или что-то еще, но для случая пользователя, который вы упомянули, API-интерфейс патча намного проще.