Gibt es eine "Dashboard"-App, die mir eine Statuszusammenfassung aller lokalen Git-Repositories in meinem Dateisystem geben kann?

Ich hätte gerne eine Software, die mir eine "Dashboard"-ähnliche Anzeige für alle meine Git-Repositories auf meinem lokalen Computer gibt.

Ich stelle mir vor, es könnte mir Statistiken sagen wie:

  • wie viele dateien werden noch nicht von git verwaltet
  • wie viele Zeilen von Diffs noch nicht festgeschrieben sind
  • wie viele Commits noch nicht an jedes Upstream-Repo gepusht wurden
  • wie viele Commits ich noch nicht aus dem Upstream gezogen habe

Die letzten beiden wären ziemlich teuer und sollten wahrscheinlich im Hintergrund berechnet werden.

So etwas wie eine kompakte und hübsche Version von

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

Da ich bereits über 90 Repos habe, muss diese Anzeige ziemlich kompakt sein. Eine GUI wäre köstlich (und eröffnet die Möglichkeit für mehr Details bei Mouseover oder Klick), aber wenn keine vorhanden ist, werde ich mich mit einem Befehlszeilentool begnügen. Ich benutze ausschließlich Linux.

Antworten (2)

Ich habe den Status in eine Textdatei unter ~/status/git-repos.txt. Hier ist die Shell-Funktion, die ich verwende:

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"
}

Initialisieren Sie die Datei und übergeben Sie ihr einige Verzeichnisse wie folgt:

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

Führen Sie dann dieses Skript in einem Cronjob aus. Die Ausgabe enthält den Zweig (mit Ausnahme von Boring Old ## master), die geänderten Dateien und wie viele Zeilen hinzugefügt oder entfernt wurden.

Es ist ziemlich kompakt und es ist einfach, große Änderungen von kleinen Änderungen zu unterscheiden.

Dies ist ein wirklich gutes Skript, aber wenn ich es ausführe, merke ich, wie unhandlich Text ist, wenn ich mit so vielen Repositories umgehe, wie ich habe. Ich fange an zu glauben, dass eine GUI (oder eine von Ihren Techniken abgeleitete HTML-Variante) die einzig akzeptable Lösung sein könnte.

Es gibt eine robustere Option namens myrepos, die sich in den Standard-Repositorys befindet.

https://myrepos.branchable.com/

Dazu müssen Sie alle Ihre Repos registrieren (im Gegensatz zum Shell-Skript oben).

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

Sie können dann den Befehl like mr statusoder verwenden mr diff, um alle Repos anzuzeigen. Das läuft ziemlich schnell; Mit einer langsamen Festplatte kann ich den Status von 64 Repositories in fast einer halben Sekunde überprüfen.

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

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

Das mrPaket unterstützt gitauch eine Vielzahl anderer Versionskontrollsysteme, aber beachten Sie, dass Sie mindestens eine Remote-URL haben müssen, dh rein lokale Repositories funktionieren nicht wirklich. Es gibt eine Problemumgehung, die hier erwähnt wird, wenn Sie neugierig sind:

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