Wednesday, April 17, 2013

Scripting Git: Pull für mehrere Repositories

Git-Repositories sind leichtgewichtig, d.h. sie lassen sich einfach und schnell anlegen, leicht kopieren und erzeugen insgesamt einfach wenig Overhead. Wichtig dabei: Halte deine Git-Repos klein, unabhängig und handhabbar, dann hast du mehr davon.

Die Migration hin Git und zu Paketverwaltung mit NuGet hat mich über eine bessere Aufteilung des Codes nachdenken lassen, was viel Gutes hinsichtlich Verständlichkeit sowie Test- und Wartbarkeit bewirkt hat. Interessanterweise haben Kollegen von mir grundsätzlich dieselbe Erfahrung gemacht.

Nach längerer Zeit habe ich gestern morgen eine kleine Änderungen dort eingebracht. Durch die säuberliche Aufteilung des Codes war diese Änderung leicht, schnell und ohne Risiko einzubringen: git pull, code, git commit & push.

Aus einer Schrulle heraus oder vielleicht auch aus alter Gewohnheit wollte ich aber "überall auf dem neuesten Stand" sein. Lokal habe ich alle spezifischen Repos in einem gemeinsamen top-level-Verzeichnis abgelegt. Da ich zu faul bin alle einzeln und manuell zu pullen musste etwas Automatisiertes her.

Ich habe git submodule ausprobiert und über git subtree nachgedacht bin aber damit nicht richtig warmgeworden. Insbesondere die detached-head-Problematik und das vergleichsweise umständliche Synchroniseren bei git-submodule haben mir nicht gefallen.

Daher scripte ich einfach:
@echo off
for /D %%a in (*) do (echo pull %%a
cd %%a
git pull
cd ..)
pause

Beispielausgabe:
pull base
Already up-to-date.
pull content
Already up-to-date.
pull repo1
Already up-to-date.
pull repo2
Already up-to-date.
...
pull repoN
Already up-to-date.
Press any key to continue . . .

No comments:

Post a Comment