2016-07-07 4 views
0

은 내가NGit으로 실제 태그를 얻는 방법?

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

} 

함께 망할 놈의 태그를 나열하는 것을 시도했다

(A git checkout tagname 후) 분리 된 지점에서 NGit와 현재의 태그를 알아야하지만이 태그를 관련하는 방법을 찾을 수 없습니다 마지막 커밋과 함께.

+0

이 그것을 표시하십시오

이 (가)에있는 태그 점에 ID를 커밋 찾는 특수성이 질문에 대한 내 대답을 참조하십시오 표. 이렇게하면 여전히 답변이없는 이전 게시물에 집중할 수 있습니다. –

답변

0

힘내는 현재 체크 아웃 된 태그를 저장하지 않습니다. 이 정보에 안전하게 액세스하려면 태그를 체크 아웃하는 동안 별도로 저장해야합니다.

그러나 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 (키)와 찾을 수있는 첫 번째 참조 (값)를 보유합니다.

이전에 체크 아웃 한 태그는 반환 된 참조 사이에 있어야합니다. 이 커밋을 위해 여러 개의 태그가 생성 된 경우 이전에 체크 아웃 한 태그가 아닌 모든 태그를 반환 할 수 있습니다.

편집 2016년 7월 11일

또는, git.tagList().call()와 저장소에서 모든 태그의 목록을 얻고 질문에 커밋을 가리키는 태그를 검색 할 수 있습니다. 당신은 대답이 문제를 해결 느끼는 경우 녹색 확인을 클릭하여 '승인'으로 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

관련 문제