java git scala jgit

java - JGit y encontrar la cabeza



scala (4)

En aras de la integridad, aquí hay un ejemplo completamente funcional de cómo obtener el hash para la confirmación HEAD:

public String getHeadName(Repository repo) { String result = null; try { ObjectId id = repo.resolve(Constants.HEAD); result = id.getName(); } catch (IOException e) { e.printStackTrace(); } return result; }

Estoy tratando de poner mis manos en el HEAD commit con JGit:

val builder = new FileRepositoryBuilder() val repo = builder.setGitDir(new File("/www/test-repo")) .readEnvironment() .findGitDir() .build() val walk: RevWalk = new RevWalk(repo, 100) val head: ObjectId = repo.resolve(Constants.HEAD) val headCommit: RevCommit = walk.parseCommit(head)

Encuentro que abre el repositorio bien, pero el valor principal se establece en null . Me pregunto por qué no puede encontrar HEAD.

Estoy leyendo esta documentación: http://wiki.eclipse.org/JGit/User_Guide

El repositorio se construye tal como lo dice el documento, y el RevWalk también. Estoy usando la última versión de JGit que es 2.0.0.201206130900-r de http://download.eclipse.org/jgit/maven .

Mi pregunta: ¿qué necesito cambiar en mi código para que JGit devuelva instancias reales de RevCommit lugar de null como hace ahora?

Actualización: Este código:

val git = new Git(repo) val logs: Iterable[RevCommit] = git.log().call().asInstanceOf[Iterable[RevCommit]]

Me da esta excepción: No HEAD exists and no explicit starting revision was specified

La excepción es impar, porque un simple git rev-parse HEAD me dice 0b0e8bf2cae9201f30833d93cc248986276a4d75 , lo que significa que hay una HEAD en el repositorio. He probado diferentes repositorios, el mio y de otras personas.


Para mí (usando 4.5.0.201609210915-r) la solución fue usar solo RepositoryBuilder lugar de FileRepositoryBuilder . Hasta que hice este cambio todos los métodos volvían a ser null .

rb = new org.eclipse.jgit.lib.RepositoryBuilder() .readEnvironment() .findGitDir() .build(); headRef = rb.getRef(rb.getFullBranch()); headHash = headRef.getObjectId().name();


También puede usar val git: Git = Git.open( new File( "/www/test-repo" ) ) . JGit luego escaneará la carpeta dada para el meta directorio de git (generalmente .git ). Si no encuentra esta carpeta, se lanzará una IOException .


setGitDir llamar al directorio de metadatos de Git (probablemente /www/test-repo/.git ) cuando llame a setGitDir , no al directorio de trabajo ( /www/test-repo ).

Debo admitir que no estoy seguro de lo que se supone que debe hacer findGitDir , pero me he topado con este problema antes y especificé el directorio .git funcionó.