使用repo.Network.ListReferences为我提供了引用的TargetIdentifier,但是在带注释的标记的情况下,它指向标记的ObjectId。我如何找到CommitId?
答案 0 :(得分:0)
仅通过利用repo.Network.ListReferences
无法检索带注释标记的目标。
您首先必须通过以下方式在本地获取:
Fetch()
重载,该重载接受一组refspec并传递new[]{ "refs/tags/v0.1:refs/tags/v0.1", "refs/tags/v1.32:refs/tags/v1.32" }
。有关获取自定义refspecs的一些指导,请参阅此 test 。如何查找CommitId?
提取引用后,在本地解析标记(例如Tag myTag = repo.Tags["v1.32"];
)。
当标签被注释时(即不是轻量级标签),myTag.IsAnnotated
属性将设置为true
,myTag.Annotation.Target
将指向{{1标签指出。
如果检索到的GitObject是GitObject
,访问其Commit
属性应该回答您的问题。
请注意,尽管不是常见情况,但标签可能指向除Id
之外的其他内容。例如Commit
或Blob
。人们甚至可以在野外找到带链接注释的标签(在这种情况下,您必须以递归方式解析每个Tree
的{{1}},直到它不再是Target
。
FWIW,有一个 open up-for-grabs issue 关于公开一种更友好的方式来检索最终的去皮目标。
有关使用LibGit2Sharp进行标记操作的更全面视图,请参阅 TagFixture.cs 测试套件。