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

时间:2012-10-08 15:20:40

标签: git libgit2

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

1 个答案:

答案 0 :(得分:4)

libgit2通过使用git_revparse_single()函数支持完整的 extended SHA-1 syntax 。要检索哈希,只需将检索到的对象传递给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);

有关使用情况的更多信息或示例,您可以查看 unit tests

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

更新

惊人的 @CarlosMartinNieto 让它成为现实。

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