ubuntuusers.de

Status mehrerer Git-Repositories abfragen

Status: Gelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

dAnjou

Avatar von dAnjou

Anmeldungsdatum:
8. Oktober 2007

Beiträge: 872

Wohnort: Berlin

Da ich kein Blog habe, dachte ich, ich teile das mal hier mit der Gemeinschaft 😛

Und zwar habe ich mehrere Git-Repos, bei denen ich manchmal lokal was ändere, ohne sofort zu commiten oder gar zu pushen. Nun wollte ich wissen wie der Stand der Dinge ist, ohne im Terminal in jedes einzelne Verzeichnis wechseln zu müssen. Da sowas wie git status /pfad/zum/repo/ offenbar nicht funktioniert und meine Recherchen im Netz nichts ergaben, habe ich mich selbst dem Problem angenommen und herausgekommen ist das hier:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash
#
# Ich jag die beiden Sachen in Zeile 9 und 10 über'n STDERR raus, damit ich die eigentlich unnötige find-Ausgabe nachher nach /dev/null schieben kann
#

find . -type d -name ".git" -execdir bash -c '
if [ ! $(git status | grep -o nothing) ]
    then
        basename "$PWD" >&2 # basename durch echo ersetzen, um den ganzen Pfad zum Repo auszugeben
        git status -s >&2
fi
' \; > /dev/null

Wenn man gut konfigurierte Repos hat, lässt sich das Script auch leicht erweitern. Beispielsweise könnte man einfach Git-Befehle wie push, pull oder commit übergeben und sie an das innere Script weiterreichen. Umbauten und Verbesserungen sind unbedingt gewünscht 😉

patchworker

Avatar von patchworker

Anmeldungsdatum:
18. Dezember 2006

Beiträge: 190

Wohnort: Nürnberg, Franken

+1

Na, das gefällt mir echt gut. Ist ja wirklich so, dass man dank git nun sehr viele git-Repositories hat. Laut Linus Torvalds ist das aber so auch genau richtig und der muss es ja schließlich am besten wissen. 😉

Eine Idee für eine Erweiterung wäre noch ein Array mit ssh Logins zu den Servern hinzuzufügen, um die man sich kümmert. So kann man auch den Status der Repositories darauf schnell sehen. Da man die Passwörter eh erst eingeben muss, ist das ja sicher genug.

So in der Richtung

1
2
3
4
5
6
SERVERS=( 'loginuser@server1.de:/path/repository1.git' 'loginuser@server2.de:/path/repository2.git' )

arraySize=${#SERVERS[@]}
for (( i=0;i<${arraySize};i++)); do
    echo ${SERVERS[${i}]}
done

Viele Grüße Daniel

berndth

Anmeldungsdatum:
26. September 2007

Beiträge: 290

dAnjou schrieb:

Da sowas wie git status /pfad/zum/repo/ offenbar nicht funktioniert

Es gibt

git --git-dir=/pfad/zum/repo/.git --work-tree=/pfad/zum/repo status

dAnjou

(Themenstarter)
Avatar von dAnjou

Anmeldungsdatum:
8. Oktober 2007

Beiträge: 872

Wohnort: Berlin

berndth schrieb:

Es gibt

git --git-dir=/pfad/zum/repo/.git --work-tree=/pfad/zum/repo status

Das funktioniert leider nicht mit globbing. Und da mein Scriptchen auch noch Git-Repos sucht, hat es doch noch eine Existenzberechtigung 😛

berndth

Anmeldungsdatum:
26. September 2007

Beiträge: 290

dAnjou schrieb:

Und da mein Scriptchen auch noch Git-Repos sucht, hat es doch noch eine Existenzberechtigung 😛

Die habe ich ihm auch nicht abgesprochen.

Antworten |