Bei Github gibt es leider keine Möglichkeit, dass man fremde git-Repositories spiegeln kann. Das hat zur Folge, dass man von Github aus spiegelt oder man muss zu Github pushen. Es gibt verschiedene Gründe, weswegen man Github nicht als das zentrale Repository nehmen möchte. Also muss man die Änderungen aktiv zu Github schieben.
Zusätzlicher Remote
Die offensichtlichste Möglichkeit ist, dass man eine zusätzlichen Remote hinzufügt.
git remote add github <github repo URL>
git push github
Man muss aber immer daran denken, dass man auch zu Github pushen muss. Wenn man im Team arbeitet müssen im Zweifel alle Teammitglieder daran denken
origin mit 2 push URLs
Eine weitere Möglichkeit ist, dass man origin 2 push URLs konfiguriert. Das man man wie folgt:
git remote set-url --add --push [remote] [original repo URL]
git remote set-url --add --push [remote] [second repo URL]
Mit git remote -v
kann man das überprüfen:
$ git remote -v
origin gogs@git.0rpheus.net:rennecke/original-repo.git (fetch)
origin gogs@git.0rpheus.net:rennecke/original-repo.git (push)
origin git@0rph3us.com:bjmiller121/second-repo.git (push)
post-receive Hook
Mit einem post-receive Hook kann man zwei oder mehr Repostories sehr elegant und auch automatisch synchron halten. Diesen Hook muss man auf seinen zentralen Repository einrichten. Dieser Hook wird jedes mal ausgeführt, wenn das Repo neue Commits erhält. Der Hook sieht wie folgt aus:
#!/bin/bash
/usr/bin/git push --mirror [second repo URL]
Falls man via ssh das zweite Repo spiegelt, muss man ggf. noch den Hostkey von Github hinzufügen.