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:
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.
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.
Hay una opción más robusta llamada myrepos
que 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 status
o mr diff
para 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 mr
paquete es compatible git
con 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:
bob mutante