Contenido

Git: ver el estado de todos los repositorios

Contenido

A veces trabajamos con muchos repositorios y hacemos cambios en varios de ellos a lo largo del día. Para ver si hemos hecho algún cambio tenemos que ir a cada repositorio a hacer un [code inline=”yes”]git status[/code] en cada uno de ellos. Si no somos muy ordenados, puede que hasta no recordemos dónde están nuestros repositorios.

Este script en Perl automatiza esta tarea, de forma que al terminar nuestra jornada podamos ver rápidamente si tenemos pendiente algún cambio:


#/usr/bin/perl
# git-status.plx
# ... Recorre todos los repositorios git a partir de la ruta dada
# ... mostrando el estado da cada repositorio
use strict;
use warnings;

my $DIR_BASE = '/home/Desarrollo';

my @repositorios = `find $DIR_BASE -name .git -type d`;
chomp (@repositorios);
my @salida;
my $cambios;

for (@repositorios) {
    @salida = `git --work-tree="$_/.." --git-dir="$_" status --porcelain`;
    if (@salida) {
        print "\nCambios pendientes en el repositorio $_:\n";
        for (@salida) {
            print "#\t$_";
        }
        $cambios = 1;
    }
}
if (!$cambios) {
    print "Ningún cambio pendiente";
}

En la variable $DIR_BASE le indicamos el directorio desde donde hacer la búsqueda de repositorios. Si queremos hacer una búsqueda en todo el sistema podemos poner la variable igual a ‘/’. También podemos definir en el array @repositorios directamente en qué directorios se encuentran nuestros repositorios.

El script va recorriendo uno a uno los repositorios y ejecuta un git status (con el parámetro --porcelain, para que la salida sea más fácil de tratar). En el caso de que tengamos algún cambio nos lo indicará, si no hay ningún cambio en ningún repositorio nos dirá “Ningún cambio pendiente”.

Los comentarios están abiertos para cualquier cuestión o sugerencia.