2

libgit2では、短い参照名を解決して完全な参照名またはハッシュを取得する方法は? どの libgit2 関数を呼び出す必要がありますか?

4

1 に答える 1

4

libgit2 は、関数を使用することで完全な拡張 SHA-1 構文git_revparse_single()をサポートします。ハッシュを取得するには、取得したオブジェクトをgit_object_id()関数に渡すだけです。

活用git_revparse_single()すると、次の標準的な git コマンド ラインの使用法を複製できます。

$ git show master
$ git show heads/master
$ git show e90810b
...

libgit2 コード:

git_repository* repo;
git_object *object;
int error;

... open existing repository ...

/* Short named references
 * Note: Might be considered ambiguous if tags/master
 * and heads/master both exist
 */
error = git_revparse_single(&obj, repo, "master"); 
git_object_free(obj);

/* Less ambiguous name */
error = git_revparse_single(&obj, repo, "heads/master");
git_object_free(obj);

/* Short hash as well */
error = git_revparse_single(&obj, repo, "e90810b"); 
git_object_free(obj);

/* Complex specs */
error = git_revparse_single(&obj, repo, "master@{0}~1^1"); 
git_object_free(obj);

/* Tree entries */
error = git_revparse_single(&obj, repo, "test/master@{1}:branch_file.txt"); 
git_object_free(obj);

使用方法の詳細または例については、単体テストを参照してください。

注:現在、短い参照名から正規参照名を取得する組み込みの公開された方法はありません。

アップデート

驚くべき@CarlosMartinNietoがそれを実現させました。

Libgit2 はgit_reference_dwim、短い名前 (例: masterheads/master、...)で参照を取得するものを公開するようになりました。

于 2012-10-08T15:44:04.640 に答える