¿Hay una aplicación de "panel de control" que pueda darme un resumen de estado de todos los repositorios locales de git en mi sistema de archivos?

Me gustaría una pieza de software que me brinde una lectura similar a un "panel de control" para todos mis repositorios de git en mi máquina local.

Me imagino que podría decirme estadísticas como:

  • cuántos archivos aún no son administrados por git
  • cuántas líneas de diferencias aún no se han comprometido
  • cuántas confirmaciones aún no se han enviado a cada repositorio ascendente
  • cuántas confirmaciones aún no he extraído de upstream

Esos dos últimos serían un poco caros y probablemente deberían calcularse en segundo plano.

Algo así como una versión compacta y bonita de

find $HOME /homes7/contracts/ -name .git -print | while read dir; do 
  d=`dirname $dir` 
  echo $d
  ( cd $d; git status)
  echo 
done

Dado que ya tengo más de 90 repositorios, esta lectura debe ser bastante compacta. Una GUI sería deliciosa (y abre la posibilidad de obtener más detalles al pasar el mouse o al hacer clic), pero si no existe, me conformaré con una herramienta de línea de comandos. Yo uso Linux exclusivamente.

Respuestas (2)

Puse el estado en un archivo de texto bajo ~/status/git-repos.txt. Aquí está la función de shell que uso:

function cron_lib_find_git_repo_status_in {
    nice -n 19 find "$*" -name '.git' -print -execdir git status --porcelain --branch \; -execdir git diff --numstat \; |
        grep -v '## master$' &>> "$HOME/status/git-repos.txt"
}

Inicialice el archivo y pásele algunos directorios como este:

date > "$HOME/status/git-repos.txt"
cron_lib_find_git_repo_status_in "$HOME/src/"
cron_lib_find_git_repo_status_in "$HOME/Dropbox/"

Luego ejecute ese script en un cronjob. La salida contendrá la rama (excluyendo aburrido antiguo ## master), los archivos modificados y cuántas líneas se agregan o eliminan.

Es bastante compacto y es fácil diferenciar los grandes cambios de los pequeños.

Este es un script realmente bueno, pero cuando lo ejecuto me doy cuenta de lo intratable que es el texto cuando se trata de tantos repositorios como tengo. Estoy empezando a pensar que una GUI (o una variación de HTML derivada de sus técnicas) podría ser la única solución aceptable.

Hay una opción más robusta llamada myreposque está en los repositorios estándar.

https://myrepos.branchable.com/

Esto requiere que registre todos sus repositorios (a diferencia del script de shell anterior).

$ mr register
Registering git url: git://my-git-url.com/path/to/repo.git in /home/username/.mrconfig

Luego puede usar el comando como mr statuso mr diffpara ver todos los repositorios. Esto funciona bastante rápido; Puedo comprobar el estado de 64 repositorios en casi medio segundo con un disco duro lento.

$ cd $HOME
$ mr status
<snip>
mr status: finished (64 ok)

real    0m0.674s
user    0m0.268s
sys     0m0.080s

El mrpaquete es compatible gitcon una variedad de otros sistemas de control de versiones, pero tenga en cuenta que debe tener al menos una URL remota, es decir, los repositorios puramente locales no funcionan realmente. Hay una solución mencionada aquí si tiene curiosidad:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=645965