libgit2 如何将短引用名称解析为完整引用名称或哈希

lin*_*ize 3 git libgit2

在 libgit2 中,如何解析短引用名称以获取完整的引用名称或哈希值?需要调用什么libgit2函数?

nul*_*ken 5

libgit2通过使用该函数支持完整的扩展 SHA-1 语法git_revparse_single()。为了检索哈希值,只需将检索到的对象传递给函数即可git_object_id()

利用这一git_revparse_single()点将允许人们复制以下标准 git 命令行用法:

$ git show master
$ git show heads/master
$ git show e90810b
...
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

有关用法的更多信息或示例,您可以查看单元测试

注意:当前没有内置的公开方法可以从短引用名称中检索规范引用名称。

更新

令人惊叹的@CarlosMartinNieto使这一切成为现实。

Libgit2 现在公开git_reference_dwim它通过短名称检索引用(例如master,,heads/master...)