Git-Repos

Entwickelt: 2021 ... 2022

Bei mir läuft ein Mini-PC als Gitlab-Server, angefangen habe ich aber mit einem Original-Git auf einem Raspi (guckst Du hier: Raspi/Server/Git). Was mir jetzt fehlt: Ich mache natürlich täglich ein Backup im Gitlab, aber: das kann man nur auf einem Server mit der gleichen SW-Version wieder einspielen und man kommt (im Gegensatz zu einem "Stino"-Git) auch nicht an die Verzeichnis- und Dateistrukturen ran. Ich hätte aber gern einen Backup-Server für meine Repos.

Die Idee: Ich transferiere die Repositories über meinen Client auf den Raspi, den ich zu meinem Backup-Remote ernenne. Das entstandene Script ist in mein Client-Backup eingebunden, kann aber auch standalone laufen.

So läuft das

  • Die Repositories sind (wie in den o. g. Erklärbär-Artikeln beschrieben) bei mir in Gruppen organisiert, in der gleichen Struktur liegen sie auch auf meinem Client im Dateisystem rum: /pfad/zu/projects/gruppe/repo
  • Das Script bkp_git_repos.sh definiert zuerst ein paar Variablen wie den Pfad zum Projekt-Basisverzeichnis auf dem Client, den Zugang zum Backup-Gitserver und das Basisverzeichnis dort für die Git-Repos
  • Im Projekt-Verzeichnis werden alle Gruppen (also 1. Verzeichnisebene) in ein Array gestopft, das wird dann durchlaufen
  • Dann werden innerhalb der Guppenverzeichnisse alle Projekt(Repo)-Verzeichnisse eingesammelt und diese ebenfalls durchkämmt (Projekte, die nicht im Git versioniert sind, liegen bei mir woanders)
  • Für jedes Repo wird gecheckt, ob ein Backup-Remote definiert ist und auf meinen Raspi zeigt. Wenn nicht, wird es ggf. hinzugefügt bzw. korrigiert (git remote add/rename backup ...).
  • Dann wird - falls vorhanden - die README.md im Projektverzeichnis gelesen, die 1. Zeile extrahiert und Markdown-Tags entfernt. Wenn das kein Ergebnis bringt (Datei nicht vorhanden oder 1. Zeile leer), dann wird eine neue Projektbeschreibung abgefragt.
  • Jetzt kommt das Script git_repo_create.sh auf dem Raspi zum Einsatz. Hier wird nochmal geprüft, ob es das Repo schon gibt und wenn nicht, wird es als leeres Repo angelegt und eine description-Datei dort angelegt.
  • Zum Schluss erfolgt das eigentliche Backup: per git push backup ... wird der Repo-Stand auf den Raspi - naja - gepusht.

Ein Hinweis: Ich bin auf meinen Git-Servern ja allein unterwegs - das ist eher nicht der Normalfall. Für Repositories, die von mehreren Leutchen genutzt werden, sollte vor dem Pushen noch ein git pull ... rein, um wirklich den aktuellen Stand auf den Client zu kriegen - wenn Du selbst inzwischen auch tätig warst, dann vorher vielleicht noch Committen und sowas ...
Gitlab-spezifische Daten wie Benutzer o. a. werden mit dem Verfahren natürlich nicht übernommen - mir ging es eben nur um Branches, Tags, Commits.

Installation: Wieder simpel - Entpacken (am besten in $HOME/bin, geht aber überall da, wo Du Ausführungsrecht hast), dann die Variablendefinitionen oben im Script an Deine Umgebung anpassen. Außerdem musst Du das Script git_repo_create.sh auf Deinen Git-Server transportieren, das GIT_BASE da umstellen (ich weiß ja nicht, wo Du Deine Repos versteckst) und ausführbar machen. Du solltest den ssh-Zugriff für den git-User auch auf Public/Private-Key umgestellt haben, wenn Du nicht für jedes Repo erneut das Passwort eingeben willst - siehe ssh.

Download: bkp_git_repos.tgz
sha256: 58d73350a853744a6774ed8880993baca52f42dec1d61e3f7a01bc0f91c02c80