2016-07-07 133 views
0

我需要知道与NGit在分离分支如何获得NGIT的实际标签?

我已经尝试列出的Git标签与

foreach(var tag in git.GetRepository().GetTags()){ 

} 

当前标记(git checkout tagname后),但我无法找到如何与这个标签与最后一次提交。

+0

如果你觉得一个答案的问题解决了,请把它标记为通过点击绿色复“接受”标记。这有助于将重点放在仍然没有答案的旧帖子上。 –

回答

0

Git不会保存当前签出哪个标签。如果您想要可靠地访问此信息,则需要在检查标签时单独存储它。

但是,你可以让Git列出所有指向特定提交的引用。

ObjectId headCommitId = repository.resolve(Constants.HEAD); 
Map<ObjectId, String> refs = git.nameRev() 
    .add(headCommitId) 
    .addPrefix(Constants.R_TAGS) 
    .call(); 

这段代码是用Java编写的,但应该很容易翻译成C#。它首先解析头引用,然后调用NameRevCommand来列出指向此提交ID的所有引用。

addPrefix()将参数限制为refs/tags/名称空间中的参考值。

返回的Map包含提交id(key)和指向它的第一个ref,可以找到(value)。

就您的情况而言,您之前签出的标签应位于返回的参考文献中。要小心,如果为这个提交创建了多个标签,它们中的任何一个都可以被返回 - 不一定是早先签出的那个标签。

编辑2016年7月11日

或者,你可以从库中的所有标签的列表,git.tagList().call()和搜索指向的问题提交的标签。

见我回答这个问题寻找提交ID到标记点的特殊性:List commits associated with a given tag with JGit

+0

感谢Rüdiger,但不确定git在NGit中没有NameRev()方法。 – TlmaK0

+0

@ TlmaK0请参阅已编辑的答案 –

+0

我之前完成了此操作以发布该问题,但在提交ID和tagref.objectId之间没有匹配的ID。我不知道这是否是一个bug,因为NGIT没有维护3年以上。最后,我改变了libgit2sharp,并且解决了这个问题。 – TlmaK0