Git: gleichzeitig auf mehrere Remotes pushen
Ich hoste meine Website selbst auf einem VPS über ein Bare Repository mit Post-Receive-Hook und spiegele den Code gleichzeitig auf Codeberg. Mit einem kleinen Git-Trick reicht dafür ein einziger git push.
Zwei Push-URLs für einen Remote
Git erlaubt es, einem einzigen Remote mehrere Push-URLs zuzuweisen — so landen beide Ziele unter origin, statt als separate Remotes. Fetch läuft weiterhin nur von einer Quelle, aber beim Pushen werden alle URLs der Reihe nach bedient:
git remote set-url --add --push origin ssh://vps/var/www/meinprojekt.git
git remote set-url --add --push origin ssh://git@codeberg.org/nutzer/repo.git
Danach sieht git remote -v so aus:
origin ssh://vps/var/www/meinprojekt.git (fetch)
origin ssh://vps/var/www/meinprojekt.git (push)
origin ssh://git@codeberg.org/nutzer/repo.git (push)
Ab jetzt genügt:
git push
Git schickt den Branch automatisch an beide Ziele.
Warum nicht zwei separate Remotes?
Man könnte stattdessen einen zweiten Remote codeberg anlegen und immer git push origin && git push codeberg ausführen. Das funktioniert, aber es ist leicht zu vergessen. Mit zwei Push-URLs am selben Remote passiert das Spiegeln implizit — kein zusätzlicher Schritt, kein vergessener Remote.
Notiz:
Optional lässt sich eine dritte URL ergänzen, zum Beispiel für GitHub:
git remote set-url --add --push origin git@github.com:nutzer/repo.git
Der nächste git push schickt dann automatisch an alle drei Ziele.
Mit git remote -v lässt sich jederzeit prüfen, wie viele Push-URLs gesetzt sind.