使用父引用

时间:2012-06-12 13:42:40

标签: c# git libgit2 libgit2sharp

我正在使用libgit2sharp,我希望得到一个代表Commit之类的HEAD~10对象。我尝试了repo.Lookup("HEAD~10"),但这不起作用:

  

LibGit2Sharp.LibGit2Exception:libgit2引发了一个错误。 Class = GITERR_REFERENCE(-1)。
   给定的参考名称无效
   at LibGit2Sharp.Core.Ensure.Success(Int32 result,Boolean allowPositiveResult)
   at LibGit2Sharp.ReferenceCollection.Resolve [T](String name)
   at LibGit2Sharp.Repository.Lookup(String shaOrReferenceName,GitObjectType type,LookUpOptions lookUpOptions)
    at 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();

1 个答案:

答案 0 :(得分:1)

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

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

  

后缀〜&lt; n&gt; to revision参数表示提交对象,该提交对象是仅在第一个父对象之后的命名提交对象的第n代祖先。

但是,最近在libgit2的开发分支中有一个功能 merged ,其中可能包含“检索父引用”及其他内容。

一个不错的API现在是 available ,可以从revparse文本规范中检索具体的git对象。为了快速查看其用法,可以使用 here 进行测试。

绑定此API并使其广泛可用于LibGit2Sharp尚未完成。