使用libgit2进行git checkout

Joh*_*und 3 c git git-checkout libgit2

这个问题是我上一个问题的演变或解决方案:克隆一个git repo(深入)我认为在这种情况下创建一个新问题是最好的事情,但我可能错了.

这个很简单:我将如何git checkout master使用libgit2做一些相同的事情

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

nul*_*ken 5

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

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

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

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

源代码包含一些示例.还有一个"fetch.c".

我如何用libgit2做一些相当于git checkout master的东西

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

  • git_reference_name_to_oid()检索master分支的oid
  • git_commit_lookup() 从一个oid撤回一个提交
  • git_commit_tree() 检索提交树
  • git_iterator_for_tree() 以递归方式浏览树的所有叶子(及其子树)

更新

克隆功能刚刚合并到libgit2存储库中.

作为pull请求的一部分,作者还负责为用户提供checkout实现.