2016-07-07 11 views
0

私はNGitで実際のタグを取得するには?

git checkout tagname後)私は

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

} 

でGitのタグを一覧表示することを試みたが、私は、このタグに関連する方法を見つけることができませんでした外れの枝にNGitと現在のタグを知っておく必要があります最後のコミットと一緒に。

+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#に簡単に翻訳する必要があります。最初にHEAD参照を解決してから、NameRevCommandを呼び出して、このコミットIDを指すすべての参照をリストします。

addPrefix()は、refs/tags/名前空間のものに限定します。

戻されたマップには、コミットID(キー)と、見つかった最初の参照(値)が格納されます。

あなたの場合、以前にチェックアウトしたタグは、返されたrefの中にあるはずです。このコミットのために複数のタグが作成された場合、そのタグのいずれかが返される可能性があります。必ずしも以前にチェックアウトされたものである必要はありません。

EDIT 2016年7月11日

また、あなたはgit.tagList().call()でリポジトリからすべてのタグのリストを取得し、問題のコミットを指すタグを検索することができます。

先のタグポイントにコミットIDを見つけることの特殊性のため、この質問に対する私の答えを参照してください:あなたは答えは問題を解決したと感じた場合は緑色のチェックをクリックして「受け入れ」として、それをマークしてくださいList commits associated with a given tag with JGit

+0

Rüdigerありがとうございますが、unfutunally gitにはNGitのNameRev()メソッドがありません。 – TlmaK0

+0

@ TlmaK0編集された答え –

+0

私は質問を投稿する前にこれをしましたが、コミットIDとtagref.objectIdの間に一致するIDはありませんでした。 NGitはメンテナンスなしで3年以上経っているので、バグかどうかはわかりません。最後にlibgit2sharpに変更しました。問題を修正しました。 – TlmaK0

関連する問題