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.