这个问题是我前一个问题的演变或解决方案:Clone a git repo (in depth)我认为在这种情况下创建一个新问题是最好的办法,但我可能错了。
这个很简单:我如何使用libgit2
执行相当于git checkout master
的操作
似乎一年前不可能:https://github.com/libgit2/libgit2/issues/247
据此,至少5个月前克隆是可能的。但我从来没有见过关于如何做到的任何code,documentation或examples。 (编辑)我的意思是我没有看到任何关于包含git checkout
的完整克隆,也没有关于结帐的任何代码/文档。
答案 0 :(得分:5)
据此,至少5个月前克隆是可能的。但我从未见过有关如何操作的任何代码,文档或示例。
克隆操作基本上由四个步骤组成:
当前版本的libgit2(v0.17.0)允许执行前三个步骤。
源代码包含一些 examples 。还有一个 "fetch.c" 。
我如何使用libgit2
执行相当于git checkout master的操作
结帐尚未实施。但是,以下内容可以帮助您继续前进。
git_reference_name_to_oid()
检索master
分支git_commit_lookup()
从oid审核提交git_commit_tree()
检索提交树git_iterator_for_tree()
以递归方式浏览树的所有叶子(及其子树)克隆功能刚刚 merged 进入libgit2存储库。
作为拉取请求的一部分,作者也负责为用户提供结帐实现。
答案 1 :(得分:3)
你可以创建一个HEAD符号,然后结帐到头,比如
git_reference_create_symbolic(&head, repo, GIT_HEAD_FILE, branchname, 1);
git_checkout_head(repo, opts, stat);