使用libgit2进行git checkout

时间:2012-05-30 17:35:37

标签: c git git-checkout libgit2

这个问题是我前一个问题的演变或解决方案:Clone a git repo (in depth)我认为在这种情况下创建一个新问题是最好的办法,但我可能错了。

这个很简单:我如何使用libgit2

执行相当于git checkout master的操作

似乎一年前不可能:https://github.com/libgit2/libgit2/issues/247 据此,至少5个月前克隆是可能的。但我从来没有见过关于如何做到的任何codedocumentationexamples(编辑)我的意思是我没有看到任何关于包含git checkout的完整克隆,也没有关于结帐的任何代码/文档。

2 个答案:

答案 0 :(得分:5)

  

据此,至少5个月前克隆是可能的。但我从未见过有关如何操作的任何代码,文档或示例。

克隆操作基本上由四个步骤组成:

  • 初始化新存储库
  • 使用fetch refspec
  • 添加远程
  • 从远程获取packfile并更新本地参考
  • 从HEAD的提交树更新workdir的内容

当前版本的libgit2(v0.17.0)允许执行前三个步骤。

源代码包含一些 examples 。还有一个 "fetch.c"

  

我如何使用libgit2

执行相当于git checkout master的操作

结帐尚未实施。但是,以下内容可以帮助您继续前进。

  • git_reference_name_to_oid()检索master分支
  • 的oid
  • 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);