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通过其短名称检索引用(例如master,,heads/master...)

于 2012-10-08T15:44:04.640 回答