JGit: Cómo obtener Branch al atravesar repositorios

Los documentos de JGit que faltan no parecen decir nada sobre cómo usar/detectar ramas mientras se usa un RevWalk.

Esta pregunta dice mas o menos lo mismo.

Entonces mi pregunta es: ¿Cómo obtengo el nombre/identificación de la sucursal de un RevCommit? ¿O cómo especifico qué rama atravesar de antemano?

preguntado el 03 de mayo de 12 a las 17:05

3 Respuestas

Descubrí una mejor manera de hacerlo haciendo bucles en las ramas.

Recorrí las ramas llamando

for (Ref branch : git.branchList().call()){
    git.checkout().setName(branch.getName()).call();
    // Then just revwalk as normal.
}

contestado el 04 de mayo de 12 a las 01:05

+1 no al atravesar una sola rama. Mi respuesta fue más sobre encontrar la rama dada una confirmación. - VonC

Mirando la implementación actual de JGit (ver su repositorio git y su RevCommit clase), no encontré el equivalente de lo que se enumera en "Git: encontrar de qué rama proviene una confirmación".
Es decir:

git branch --contains <commit>

Sólo algunas de las opciones de git branch se implementan (como en ListBranchCommand.java).

contestado el 23 de mayo de 17 a las 13:05

Sí, parece que no hay soporte para pasar de confirmación -> rama, pero ¿sabe si es posible atravesar solo las confirmaciones de una sola rama? - Braden

+1 porque tu respuesta me ayudó a ir en la dirección correcta. Es interesante ver exactamente lo que implementaron. - Braden

podría usar el siguiente código para obtener la rama "desde" mediante confirmación:

/**
     * find out which branch that specified commit come from.
     * 
     * @param commit
     * @return branch name.
     * @throws GitException 
     */
    public String getFromBranch(RevCommit commit) throws GitException{
        try {
            Collection<ReflogEntry> entries = git.reflog().call();
            for (ReflogEntry entry:entries){
                if (!entry.getOldId().getName().equals(commit.getName())){
                    continue;
                }

                CheckoutEntry checkOutEntry = entry.parseCheckout();
                if (checkOutEntry != null){
                    return checkOutEntry.getFromBranch();
                }
            }

            return null;
        } catch (Exception e) {
            throw new GitException("fail to get ref log.", e);
        }
    }

Respondido el 18 de diciembre de 12 a las 03:12

Muy interesante, pero sospecho que no escalaría para un repositorio grande. - pedro kahn

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.