JGit: Cómo obtener Branch al atravesar repositorios
Frecuentes
Visto 4,225 equipos
8
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?
3 Respuestas
6
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
2
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
1
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
+1 no al atravesar una sola rama. Mi respuesta fue más sobre encontrar la rama dada una confirmación. - VonC