2016-07-07 130 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