Versionsverwaltung: In 2 Schritten zum eigenen Git-Server
Wer Versionsverwaltung einsetzt, wird von Git schon mal gehört haben – nicht zuletzt durch GitHub. Das verteilte Versionsverwaltungs-System Git kann aber auch ohne GitHub benutzt werden, was gerade dann hilfreich ist, wenn ihr als Entwickler euren Code nicht bei GitHub speichern wollt. Im folgenden findet ihr eine kurze Einleitung, wie ihr aus eurem Server einen Git-Server machen könnt – perfekt für kleine Teams.
Git-Server einrichten
sudo apt-get install git
Damit installiert ihr Git am Server. Als nächstes legt ihr euch einen Benutzer an, der auf alle Repositorys zugreifen kann. Ihr könnt dem Benutzer eine Bash mitgeben, damit die weitere Konfiguration leichter von der Hand geht. Allerdings würde ich im Betrieb dann die „git-shell“ verwenden, anstelle der „bash“ – aber dazu später mehr.
sudo useradd -m -d /var/git -s /bin/bash -c 'Git' git
Das System verfügt nun über den User „Git“ mit dem Home-Verzeichnis /var/git
. Mit sudo su - git
wechselt ihr in die Rolle von „Git“. Im nächsten Schritt sammelt ihr euch die SSH-Schlüssel der Nutzer ein und speichert diese in der authorized_keys
-Datei im Verzeichnis von „Git“ unter ~/.ssh
. Achtet darauf, dass nur „Git“ diese Verzeichnis lesen kann und dass nur ein SSH-Schlüssel pro Zeile gültig ist. Das könnt ihr mit dem folgenden Befehlen tun:
mkdir /var/git/.ssh
touch /var/git/.ssh/authorized_keys
chmod 700 /var/git/.ssh
Repositories anlegen und verwalten
Ihr habt jetzt einen Git-Server, auf den nur diejenigen zugreifen können beziehungsweise dürfen, deren SSH-Schlüssel am Server abgespeichert wurden. Der nächste logische Schritt ist das Anlegen eines Repositorys, oder das Einspielen eines bereits vorhandenen.
Davon ausgehend, dass bereits ein Repository auf GitHub exisitiert, könnt ihr dieses mit folgender Anweisung auf euren Server mit migrieren:
git --bare fetch https://username@github.com/username/repository-name.git master:master
Beachtet, dass ihr „username“ durch euren Benutzernamen ersetzen müsst, sowie „repository-name“ durch den Namen des gewünschten Repositorys.
Solltet ihr ein komplett neues Repository anlegen wollen, müsst ihr in einem Zwischenschritt eine Repository-URL hinzufügen. Dazu wechselt ihr in euer lokales Git-Repository-Verzeichnis und führt diese Zeilen aus:
git remote add origin git@dev.deine-domain.de:repository.git
git push origin master
Damit legt ihr eine neue Repository-URL an und „pusht“ euren Code auf den Server. Bevor ihr den Code aber ausführt, müsst ihr „dev.deine-domain.de durch den Host-Namen eures Entwicklungs-Servers tauschen.
Fazit: Euer eigener Git-Server
Ihr habt jetzt eine vollfunktionstüchtige Git-Umgebung eingerichtet, auf die Entwickler über den „git“-Account Zugriff haben. Um das zukünftige Arbeiten zu erleichtern, aktivieren wir – wie schon angesprochen – die sogenannte „git-shell“. Diese Shell verhindert ein Ausführen eigenmächtiger Anweisungen der Entwickler auf dem System und limitiert die Fähigkeiten des gemeinsam genutzten „git“-Benutzers auf Befehle, die nur für die Arbeit mit Git relevant sind.
logout
sudo chsh -s /usr/bin/git-shell git
Beim nächsten Login wird die „git-shell“ gestartet und ihr seid bereit, mit eurem eigenen Git-Server eure Projekte zu verwalten. Wem das Thema Versionskontrolle mit Git noch nicht ganz geläufig ist, dem kann ich dieses Git-Tutorial empfehlen – aber auch GitHub bietet eine gute Tutorial-Seite an. Und wenn ihr eine grafische Oberfläche einsetzen wollt, könnt ihr auf folgende Tools zurückgreifen: Gitorious und Gitalist. In der obersten Liga spielt übrigens Stash – wenn ihr also eine Enterprise-Git-Lösung sucht, solltet ihr euch diese Software genauer ansehen.
Habt ihr Vertrauen in GitHub?
Zusätzlich zu den genannten Git Oberflächen, gibts noch GitLab. Sehr ähnlich zum bekannten GitHub UI.
https://www.gitlab.com/
Also manchmal schüttel ich nur den Kopf über t3n. Warum wird Stash genannt, aber nicht das viel bessere deutsche Software „RhodeCode Enterprise“ aus Berlin?
RhodeCode ist kostenlos bis 20 Benutzer, läuft unter Windows und Linux und unterstützt auch Mercurial.
https://rhodecode.com
Danke fürs Tutorial..gleich mal testen..
Ich unterstreiche auch noch mal den Tipp mit Gitlab (https://www.gitlab.com/gitlab-ce/). Nicht gerade die 5-Minuten-Wordpress-Installation, aber der Aufwand lohnt sich sehr.
Ich empfehle auch dringend Gitlab. Damit lassen sich User, Berechtigungen und Repositories vernünftig managen. Die Installation ist sehr gut beschrieben. Have Fun!
Ich finde diese Anleitung ist nicht bis zum Ende gedacht. Wenn ich nur einen User für alle Mitglieder im Team habe, wird jeder Code unter dem git user gepusht. Dann kann ich im Nachhinein nicht mehr unterscheiden wer welchen Code gepusht hat. Und eigene Shell-User fallen schnell weg, wenn die Entwickler nicht zumindest grundlegende Kenntnisse der Shell haben.
Wer für solche einfachen Aufgaben wie das einrichten eines git-Servers eine Anleitung benötigt, sollte vielleicht sowieso einmal darüber nachdenken ob er dafür geeignet ist einen Server für ein Team bereitzustellen!
Für einen Entwickler allein ist die Anleitung zu gebrauchen, fürs Entwickeln im Team bringt das nichts.
@Ivonne
Danke für den Tipp bezüglich RhodeCode. Habe bis jetzt nur mit das GitLab und Stash gearbeitet. Aber die Code-Review Features von RhodeCode sehen sensationell aus: https://rhodecode.com/features/productivity
Hallo,
um das Ganze mal mit gitLab auszuprobieren, kann man auch auf das turnkey Image zurückgreifen.
Git+GitLab im Handumdrehen zum Testen parat.
Viele Grüße
Björn
Danke für das Feedback!
Vielleicht lege ich einen eigenen Artikel für GitLab nach.
Nutze das jetzt seit ca. 5 Monaten, bin von BitBucket (SaaS Version von Atlassian Stash) umgestiegen und bereue es keineswegs. Ist zwar wirklich nicht in 5 Minuten installiert, aber sobald es fertig installiert ist läuft es absolut super. In den 5 Monaten keinerlei Probleme gehabt.
Absolute Empfehlung von mir.
Wem eine GitLab-Installation oder der eigene Git-Server zu umfangreich ist, der kann auch zu http://www.githost.de gehen. githost.de nutzt GitLab und bietet daher auch eine Alternative zu GitHub vor allem für Closed-Source-Repositories. Bis 5 MB gibt es hier das Repro kostenlos. Das reicht für kleiner Webprojekt völlig zu. Wer mehr Speicher möchte bekommt mehr und das zu einem fairen Preis, denn man bezahlt nur das was man wirklich auch nutzt.
Wir benutzen in unserer Firma (bekannter Konsolen-Hersteller) ebenfalls RhodeCode jedoch mit einer deutlich größeren Nutzeranzahl. Wir haben mittlerweile fast alle kleineren Dimensionen (u.a. Gitlab) durch. Jede Firma mit mehr als 20 Developer muss RhodeCode ausprobieren und wird begeistert sein!
Wir sind letztlich in Sachen Versionskontrolle von Apache Subversion (SVN) zu Git (ergo Gitlab) gewechselt. Wir haben die Alternativen zu SVN aufgeführt und den Migrationsprozess bei uns im Blog dokumentiert: http://bit.ly/migration-git
GitLab wurde schon oft genannt, benutzt jemand die Kombination Redmine + gitolite? RhodeCode werde ich mir mal anschauen, scheint aber nur als kommerzielle Version nutzbar zu sein oder?
Wie ist denn das Passwort des neu angelegten GIT-Users? Ich muss das Passwort eingeben, um beispielsweise den öffentlichen SSH Key ablegen zu können.