git-Remote schnell und einfach
Dass man mit $ git init
lokal ein Repository erstellt und dann Daten committen kann, dürfte bekannt sein. Aber das schöne an git ist unter anderem, dass man die Daten über Remotes an unterschiedlichen Orten speichern kann
Den meisten dürfte github ein Begriff sein. Dort kann man kostenlos Remotes einrichten, die von jedem lesbar sind. Privat kostet es hingegen. Ist man im Besitz eines eigenen Servers, kann man diesen leicht dafür nutzen.
Häufig wird dann auf gitolite zurückgegriffen. Das ist ein umfangreiches Tool zur Verwaltung von Zugriffsrechten. Letztendlich ist damit ein Zugriff wie bei github möglich (Benutzer, Gruppen, git-url-Format).
Es geht jedoch auch einfacher, wenn man diese umfangreiche Rechteveraltung nicht braucht. git ist nämlich von Haus aus ideal für entfernte Remotes geeignet. Alles, was man braucht, ist ein ssh-Zugang.
Erstellen des Remotes
Man sucht sich zuerst ein nettes Plätzchen auf dem Server, z.B. ~/git-remotes. Dort erstellt man ein Unterverzeichnis für den neuen Remote. Aus Konvention besitzt dieses Verzeichnis die Endung .git.
$ cd ~/git-remotes
$ mkdir demo.git
Anschließend muss dieses Verzeichnis in ein git-Remote verwandelt werden.
$ cd demo.git
$ git --bare init
Initialized empty Git repository in ~/git-remotes/demo.git/
$ git config core.sharedRepository 1
$ git config receive.denyNonFastForwards true
Zuerst wird in das Verzeichnis gewechselt, dann die git-Struktur erzeugt. Das --bare
bedeutet, dass keine Arbeitskopie erzeugt werden soll. Anschließend werden (optionale) Optionen gesetzt, damit die Dateien Gruppenrechte erhalten und beim git push
keine Commits überschrieben werden.
Remote dem lokalen Respository hinzufügen
Zum Schluss muss dieser Remote nur noch unserem lokalen Repository hinzugefügt und die Daten gepusht werden.
$ git remote add origin server:git-remotes/demo.git
$ git push -u origin master
server
ist dabei entweder eine Domain (dann gilt der aktuelle Benutzername) oder ein Server aus der ~/.ssh/config. Möchte man den Benutzernamen oder Port direkt angeben, so kann man auch ssh://benutzer@server:port/absoluter/pfad
nehmen.
Beim push sorgt das -u
dafür, dass dieser Remote als upstream in die Konfiguration eingetragen wird. Das heißt, dass beim nächsten mal nur ein git push
notwendig ist.