我正在使用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();
答案 0 :(得分:1)
不幸的是,LibGit2Sharp无法接受 rev-parse revision-specification syntax 之后的参数。
建议的解决方法是目前最好的实施方案。它完全符合声明的文档
后缀〜&lt; n&gt; to revision参数表示提交对象,该提交对象是仅在第一个父对象之后的命名提交对象的第n代祖先。
但是,最近在libgit2的开发分支中有一个功能 merged ,其中可能包含“检索父引用”及其他内容。
一个不错的API现在是 available ,可以从revparse文本规范中检索具体的git对象。为了快速查看其用法,可以使用 here 进行测试。
绑定此API并使其广泛可用于LibGit2Sharp尚未完成。