Quiero obtener los últimos metadatos de confirmación (el más reciente por fecha) en un repositorio usando JGit.
Sé que puedo obtener los metadatos de confirmación usando:
try (RevWalk walk = new RevWalk(repository)) { RevCommit commit = walk.parseCommit(repository.resolve(commitHash)); }Pero, ¿cómo obtener el último hash de confirmación?
¿Hay alguna otra forma de obtener el RevCommit más reciente por fecha en un repositorio directamente?
Puede hacer uso de git log y configurarlo para que solo devuelva la confirmación más alta:
RevCommit latestCommit = new Git(repository). log(). setMaxCount(1). call(). iterator(). next(); String latestCommitHash = latestCommit.getName();Comparar por fechas de las últimas confirmaciones en todas las ramas. ListMode.ALL se puede cambiar a ListMode.REMOTE para comparar solo sucursales remotas. O... el setter fluido .setListMode(whatever) se puede omitir para leer desde el repositorio local.
RevCommit youngestCommit = null; Git git = new Git(repository); List<Ref> branches = git.branchList().setListMode(ListMode.ALL).call(); try { RevWalk walk = new RevWalk(git.getRepository()); for(Ref branch : branches) { RevCommit commit = walk.parseCommit(branch.getObjectId()); if(youngestCommit == null || commit.getAuthorIdent().getWhen().compareTo( youngestCommit.getAuthorIdent().getWhen()) > 0) youngestCommit = commit; } } catch (...)Para encontrar la confirmación más reciente dentro de un repositorio, configure un RevWalk para comenzar con todas las referencias conocidas y ordénelo de forma descendente por fecha de confirmación. Por ejemplo:
Repository repo = ... try( RevWalk revWalk = new RevWalk( repo ) ) { revWalk.sort( RevSort.COMMIT_TIME_DESC ); Map<String, Ref> allRefs = repo.getRefDatabase().getRefs( RefDatabase.ALL ); for( Ref ref : allRefs.values() ) { RevCommit commit = revWalk.parseCommit( ref.getLeaf().getObjectId() ); revWalk.markStart( commit ); } RevCommit newestCommit = revWalk.next(); } Dependiendo de su caso de uso, también puede marcar puntos de inicio desde las referencias de repo.getRefDatabase().getAdditionalRefs() que incluye referencias como FETCH_RESULT , ORIG_HEAD , etc. Si encuentra que todavía hay referencias sin seguimiento, use repo.getRefDatabase().getRef() .