2013-02-16 4 views
4

Я хочу получить список всех тегов репозитория вместе с tagger и идентификаторами commit с JGit.Получить все теги репозитория с помощью JGit

Сначала я попробовал команду Git.tagList().call() и разобрать теги:

objectIdOfTag = oneResultOfTheTagList.getObjectId(); 
// or should I call getPeeledObjectId() here? 

RevWalk walk = new RevWalk(repository); 
RevTag tag = walk.parseTag(objectIdOfTag); 

Это работает для моего репозитория, но я не уверен, если это правильный путь: Является ли это правильно называть Ref.getObjectId() или я должен позвонить Ref.getPeeledObjectId() ? (Что такое «очищенный ObjectId»?

Есть ли разница между легкими и аннотированными тегами при получении списка тегов с помощью JGit?

ответ

6

getObjectId верен здесь. В случае аннотированного тега вы хотите получить идентификатор объекта аннотированного тега, а не идентификатор фиксации, на который указывает тег. См. Также Javadoc of Ref.

Для разбора тега, вам придется обрабатывать оба легких и аннотированные случаях:

RevObject object = walk.parseAny(objectIdOfTag); 
if (object instanceof RevTag) { 
    // annotated 
} else if (object instanceof RevCommit) { 
    // lightweight 
} else { 
    // invalid 
} 
+0

Спасибо, что информация является весьма полезным для меня. – Sonson123

+0

Добро пожаловать! Кстати, было бы полезно посмотреть, как EGit использует JGit API в таких случаях, см. [Руководство для авторов EGit] (http://wiki.eclipse.org/EGit/Contributor_Guide) для инструкций по установке. – robinst

+0

Последний вопрос: могу ли я получить имя * легкого тега с помощью 'ListTagCommand' (для' RevTag' я могу использовать 'revTag.getTagName()'.)? (Или я должен создать свой собственный «RevWalk», чтобы получить все теги?) – Sonson123

Смежные вопросы