2012-05-03 12 views
7

Los documentos JGit que faltan no parecen decir nada sobre cómo usar/detectar ramas mientras se usa un RevWalk.JGit: Cómo obtener Branch al atravesar repos

This question dice más o menos lo mismo.

Entonces mi pregunta es: ¿Cómo obtengo el nombre/id de la rama de un RevCommit? ¿O cómo especifico qué rama pasar antes de la mano?

Respuesta

5

Encontrado una mejor manera de hacerlo haciendo bucles de ramas.

I en loop las ramas llamando

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

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

2

En cuanto a la implementación actual de JGit (ver its git repo y su clase RevCommit), no encontré el equivalente de lo que figura en "Git: Finding what branch a commit came from".
Es decir:

git branch --contains <commit> 

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

+0

Sí, parece que no hay soporte para ir de cometer -> rama, pero ¿sabes si es posible atravesar solo las confirmaciones de una sola rama? – Braden

+0

+1 porque tu respuesta me ayudó a ir en la dirección correcta. Interesante para ver exactamente lo que implementaron. – Braden

1

podría utilizar a continuación código para obtener "de" rama de cometer:

/** 
    * 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); 
     } 
    } 
+0

Muy interesante, pero sospecho que no se escalaría para un gran repositorio. –