JGit: Получить тег, связанный с коммитом git - PullRequest
8 голосов
/ 21 сентября 2011

Я хочу использовать JGit API для получения тегов, связанных с конкретным хэшем фиксации (если есть)?

Пожалуйста, предоставьте фрагмент кода для того же.

Ответы [ 2 ]

11 голосов
/ 21 сентября 2011

Модель объектов Git описывает тег как объект, содержащий информацию о конкретном объекте, т.е. commit (среди прочего), поэтому в чистом git невозможно получить нужную информацию (объект commit не имеет информации о связанных тегах). Это должно быть сделано «задом наперед», взять объект тега и затем обратиться к конкретному коммиту.

Так что, если вы хотите получить информацию о тегах, указанных для конкретного коммита, вам следует перебрать их (теги) и выбрать подходящий.

List<RevTag> list = git.tagList().call();
ObjectId commitId = ObjectId.fromString("hash");
Collection<ObjectId> commits = new LinkedList<ObjectId>();
for (RevTag tag : list) {
    RevObject object = tag.getObject();
    if (object.getId().equals(commitId)) {;
        commits.add(object.getId());
    }
}
4 голосов
/ 18 июня 2014

Если вы знаете, что для вашего коммита есть ровно один тег, вы можете использовать description в более поздних версиях JGit ( ~ ноябрь 2013 ).

Git.wrap(repository).describe().setTarget(ObjectId.fromString("hash")).call()

Вы можете проанализировать результат, чтобы увидеть, существует ли тег, но если может быть несколько тегов, вы должны использовать решение Marcins.

...