1

我正在使用 libgit2sharp,我想获得一个Commit代表类似HEAD~10. 我试过repo.Lookup("HEAD~10")了,但这不起作用:

LibGit2Sharp.LibGit2Exception:libgit2 引发错误。类 = GITERR_REFERENCE (-1)。
给定的参考名称   在 LibGit2Sharp.Repository.Lookup(String shaOrReferenceName, GitObjectType type, LookUpOptions lookUpOptions   的 LibGit2Sharp.ReferenceCollection.Resolve[T](String name)的
  LibGit2Sharp.Core.Ensure.Success(Int32 result, Boolean allowPositiveResult) )   在 libgit2Sharp.Repository.Lookup(String shaOrReferenceName, GitObjectType type)   在 libgit_tmp.Program.Main(String[] args)



我意识到我可以通过类似下面的代码来做同样的事情,但如果我能以这种方式指定引用,我仍然更喜欢它。有什么办法吗?如果不是,是 libgit2sharp 还是 libgit2 的限制?

var commit = repo.Head.Tip;
for (int i = 0; i < 10; i++)
    commit = commit.Parents.First();
4

1 回答 1

1

不幸的是,LibGit2Sharp 无法接受遵循rev-parse revision-specification syntax 的参数。

建议的解决方法是目前最好的实现。它完全符合说明的文档

修订参数的后缀 ~<n> 表示作为指定提交对象的第 <n> 代祖先的提交对象,仅在第一个父代之后。

但是,最近在 libgit2 的开发分支中合并了一项功能,该功能可能涵盖“检索父引用”的需求及其他需求。

现在可以使用一个不错的 API ,并且可以从 revparse 文本规范中检索具体的 git 对象。为了快速了解其用法,可在此处获得测试。

绑定这个 API 并使其对 LibGit2Sharp 广泛可用还有待完成。

于 2012-06-12T15:44:51.820 回答