git-Repo auf Server verschieben

Manchmal ist es notwendig, ein schon vorhandenes git-Repository auf einem Server für andere, die z. B. neu zum Projekt stoßen, bereit zu stellen. Das erfolgt hier mit Hilfe eines ssh-Zugangs.

Dazu wandelt man als erstes das git-Repo in ein einfaches Repo, also ohne Arbeitsverzeichnis um (Referenz):

$ git clone --bare repo-work.git repo-bare.git

repo-work.git ist das aktuelle Arbeitsverzeichnis und repo-bare.git das neu erstellte in der einfachen Variante. Nun lädt man das neue git-Repo auf den Server:

$ scp -r repo-bare.git user@my.server.org:/pfad/fuer/projekte

Damit auch alle anderen mit dem git-Repo arbeiten können, werden alle Benutzer in die neue Gruppe git gesteckt und das git-Repo für alle in dieser Gruppe freigegeben:

$ ssh user@my.server.org
$ sudo addgroup git
$ cd /pfad/fuer/projekte/repo-bare.git
$ git init --bare --shared
$ cd ..
$ sudo chgrp -R git repo-bare.git

Wenn man nicht möchte, dass sich Benutzer auf dem Server einloggen können, kann man für diese Nutzer die normale Shell deaktivieren und statt dessen die extra dafür vorgesehene git-shell verwenden:

$ sudo chsh -s $(command -v git-shell) user

Dadurch wird die aktuelle Shell des Benutzers user auf git-shell gesetzt. Jetzt kann der Nutzer zwar git benutzen, aber ein Login scheitert. Mit dieser Methode ist es auch möglich, dass alle Nutzer mit dem gleichen Account arbeiten ohne gleich Zugang zum Server zu haben.