Utilizando la información de estado de Git short format, aquí hay un script de Bash que usa Awk y el comando column
para darle una salida de estado personalizada.
#!/bin/bash
git status --porcelain | \
awk 'BEGIN {FS=" "}
{
xstat = substr($0, 1, 1);
ystat = substr($0, 2, 1);
f = substr($0, 4);
ri = index(f, " -> ");
if (ri > 0) f = substr(f, 1, ri);
if (xstat == " " && ystat ~ "M|D") stat = "not updated";
else if (xstat == "M" && ystat ~ " |M|D") stat = "updated in index";
else if (xstat == "A" && ystat ~ " |M|D") stat = "added to index";
else if (xstat == "D" && ystat ~ " |M") stat = "deleted from index";
else if (xstat == "R" && ystat ~ " |M|D") stat = "renamed in index";
else if (xstat == "C" && ystat ~ " |M|D") stat = "copied in index";
else if (xstat ~ "M|A|R|C" && ystat == " ") stat = "index and work tree matches";
else if (xstat ~ " |M|A|R|C" && ystat == "M") stat = "work tree changed since index";
else if (xstat ~ " |M|A|R|C" && ystat == "D") stat = "deleted in work tree";
else if (xstat == "D" && ystat == "D") stat = "unmerged, both deleted";
else if (xstat == "A" && ystat == "U") stat = "unmerged, added by us";
else if (xstat == "U" && ystat == "D") stat = "unmerged, deleted by them";
else if (xstat == "U" && ystat == "A") stat = "unmerged, added by them";
else if (xstat == "D" && ystat == "U") stat = "unmerged, deleted by us";
else if (xstat == "A" && ystat == "A") stat = "unmerged, both added";
else if (xstat == "U" && ystat == "U") stat = "unmerged, both modified";
else if (xstat == "?" && ystat == "?") stat = "untracked";
else if (xstat == "!" && ystat == "!") stat = "ignored";
else stat = "unknown status";
print f " " stat;
}' | \
column -t -s " "
Si crea un archivo ejecutable git-status-ls
en un directorio de su PATH
($HOME/bin
debería ser un buen lugar), puede escribir git status-ls
en cualquier repositorio git. O podrías crear un alias Git alias para esto. También puede implementar esto usando Perl, Python, C o el idioma con el que se sienta más cómodo.
Aquí está un ejemplo de salida:
B renamed in index
A untracked
dont_delete_git_pre-commit_hook untracked
acabo de dar cuenta, las pestañas están mostrando como espacios. En el script Awk print f " " stat;
y en el comando column -t -s " "
, hay una pestaña (no espacios) entre las comillas dobles. Puede usar un separador que no sea tab.
Noté un problema con el manejo de los indicadores de estado en el script anterior y lo corrigí.
¿Qué le discute es la ventaja de este formato sobre'Estado' git? – Nate
@Nate: ofrece un mejor birdseye, IMO. Especialmente útil si se cambiaron muchos archivos. Pero también es útil ver los cambios en el contexto de toda la lista de directorios. – berkes
Lo más cercano es probablemente 'git status -s', pero no informará nada más que las modificaciones – fge