在libgit2中,如何解析短引用名称以获取完整的引用名称或哈希? 需要调用什么libgit2函数?
答案 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
,它通过短名称检索引用(例如master
,heads/master
,...)