Zuerst möchte ich sagen, was für ein großartiges Tool git ist. Selbst für einen Laien wie mich. Natürlich wird auch der Inhalt dieses Blogs via git gepflegt und selbst wenn man keinen eigenen source code management (SCM) Server hat kann es einem bei allen möglichen Arbeiten helfen. Große Binary Large Objects sollte man zwar tunlichst nicht via git versionieren, aber bis auf diesen Umstand kann man git wunderbar als Versionierung jeglicher digitalen Arbeit nutzen. Sehr viele User nutzen github.com als zentrales SCM und in der Vergangenheit hat sich github.com sehr für die OpenSource Community eingesetzt. Es gibt nur ein winzig kleines Problem. Wenn man keinen bezahlten Account hat, kann man keine privaten, also nicht öffentlichen, Repositories erstellen. Hat man ein Projekt, welches man nicht öffentlich machen will, muss man ein bisschen Geld in die Hand nehmen. 7$ pro Monat oder 84$ pro Jahr. Das ist jetzt erstmal nicht sonderlich viel. Vor allem wenn ich mir meine sonstigen Kosten für derlei Spielereien ansehe. Alleine der Server auf dem dieser Blog läuft, kostet mich 5EUR im Monat.

Für alle die sich das Geld sparen wollen, hat sich vor einiger Zeit Gitlab.com auf die Fahne geschrieben eine Art kostenloses Github zu sein. Das Feature Set ist sehr ähnlich und bietet wohl auch noch Continuous Integration an.

Für mich gibt es aber einige, mehr oder weniger gute, Gründe nicht alles bei Github/Gitlab zu hosten.

  1. Die Idee private Repositories nur gegen Bezahlung anzubieten sorgt, zumindest auf github.com für echte Vielfalt. Da gibt es fast nichts, was es nicht gibt. Dennoch habe ich unterschwellig immer ein ungutes Gefühl. Ich kann nicht sicher sein, dass meine privaten Repositories nicht geleakt werden, zugegeben ist das bei meinen Projekten nicht so wirklich wild, und ich muss mich auf die Leute verlassen, wenn es um Backups geht.
  2. Was passiert mit meinen Daten, wenn die Investoren sich dazu entscheiden den Laden zu schließen? Habe ich noch die Chance diese runter zu laden? Muss ich Geld in die Hand nehmen? Wo bekomme ich auf die schnelle einen Ersatz SCM Dienst her?
  3. Ich möchte meinen Code gerne bei github.com haben, anstatt bei Gitlab.com. Da ich selber so verschwindend wenig Content produziere lohnt sich das Geld einfach nicht. Trotzdem will ich nicht alles öffentlich haben.

Das hat dazu geführt, dass ich einen eigenen SCM Server betriebe. Das ist jetzt keine große Magie und funktioniert einfach. Dieser Server ist mein SCM Server. Ich kümmere mich darum und weil es so einfach ist, muss ich mir auch keine Sorgen machen, dass da irgendwer Code rausträgt. Genau was ich für mich will. Und jetzt kommt der eigentliche Clou. Ich kann mit post-receive hooks einzelne Repositories nach github.com pushen.

Zuerst müssen allerdings das Repository bei Github erstellt werden und ein SSH Key hinterlegt sein. Da mein SSH Key doch recht weit verbreitet ist, habe ich auf dem Server einfach einen neuen Key erstellt und diesen unter ~/.ssh/id_rsa abgelegt. Und jetzt einfach folgenden post-receive hook anlegen.

git push --set-upstream <repository bei Github> master

Thats it.


Gerade kommt mir der Gedanke ob es nicht eine Möglichkeit gibt mit der API von Github zu arbeiten. In meinem Kopf geistern gerade folgende Gedanken:

  • Mittels API das entsprechende Repository erstellen, fall es noch nicht existiert.
  • Einen API Key pro Repository nutzen. (Ich bin mit doch recht sicher, dass das nur mit einem bezahlten Account geht, wenn überhaupt.)
  • Mittels API Pushen. Wahrscheinlich nicht so einfach umzusetzen, wenn man nicht seine Github Zugangsdaten irgendwo klartext bunkern will.