JGit Clone и получить хэш ревизии

Я использую приведенный ниже код для клонирования репозитория git из Java. Мне нужно сохранить клонированный хэш последней версии.

localRepo = new FileRepository(path);
git = new Git(localRepo);
Git.cloneRepository().setURI(url).setBranch("master")
                .setDirectory(new File(path)).call();
git.close();

Любая подсказка о получении хэша ревизии здесь?


person Upen    schedule 13.10.2015    source источник
comment
Вы имеете в виду хэш ревизии ветки master?   -  person Rüdiger Herrmann    schedule 14.10.2015
comment
Да, Рюдигер. Последний клонированный хеш, как мы видим в jenkins.   -  person Upen    schedule 14.10.2015
comment
Не существует такого понятия, как «последний клонированный хэш». В репозитории может быть много refs (ветвей, тегов и т. д.), которые указывают на фиксацию. Чтобы получить хэш фиксации ссылки, обратитесь к ответу, данному centic. Обычно вы хотите получить хэш коммита HEAD. Если вам нужно узнать хэш самого молодого коммита в репозитории, дайте мне знать, и я соберу ответ, как найти самый новый коммит среди известных ссылок.   -  person Rüdiger Herrmann    schedule 14.10.2015
comment
Я всегда буду клонировать мастера. Так что думаю, я могу использовать refs/heads/master. Попробовал центральный ответ. Голова отображается как ноль. Спасибо, если бы вы могли показать мне способ получить хэш самой молодой фиксации. Я использую это для процесса управления релизами. Хэш помог бы мне идентифицировать существующий производственный код.   -  person Upen    schedule 14.10.2015
comment
На «текущий производственный код» всегда следует ссылаться через отдельную ссылку, например. refs/heads/master. Или какая-то назначенная цель, к которой стремятся разработчики, когда хотят что-то выпустить. Следовательно, должен подойти ответ centic.   -  person Rüdiger Herrmann    schedule 14.10.2015


Ответы (1)


Вы можете получить Ref, который содержит ObjectId из HEAD, следующим образом:

        Ref head = repository.getAllRefs().get("HEAD");
        System.out.println("Ref of HEAD: " + head + ": " + head.getName() + " - " + head.getObjectId().getName());

Это печатает что-то вроде этого

Ref of HEAD: SymbolicRef[HEAD -> refs/heads/master=f37549b02d33486714d81c753a0bf2142eddba16]: HEAD - f37549b02d33486714d81c753a0bf2142eddba16

См. также связанный фрагмент в jgit-cookbook

Вместо HEAD вы также можете использовать такие вещи, как refs/heads/master, чтобы получить HEAD ветки master, даже если в данный момент извлечена другая ветка.

person centic    schedule 14.10.2015
comment
localRepo = новый FileRepository (путь); git = новый git (localRepo); Git clone = Git.cloneRepository().setURI(url).setBranch(ветка).setDirectory(новый файл(путь)).call(); Ref head = localRepo.getRef(refs/heads/master); Head имеет значение null и отображается как null. Я делаю что-то неправильно? - person Upen; 14.10.2015
comment
работает сейчас. Я сделал ошибку при создании репозитория. - person Upen; 15.10.2015