Git brach löschen

Lokaler Branch löschen:

dix@dione:~/workspace/radkarte$ git branch -d status
Deleted branch status (was 2ac4633).

Dazugehörigen Remote Branch löschen:

dix@dione:~/workspace/radkarte$ git push origin :status
To ssh://gitosis@psj-world.de:22/radkarte.git
- [deleted]         status

GIT: Remote-Repository anlegen und pushen

Verwalten von Repositories

Die Verwaltung von Repositories und (wie wir später sehen werden) von Benutzern geschieht bei Gitosis über ein eigens dafür vorgesehenes Git-Repository, welches bei der Installation auf dem Server erzeugt wurde. Es lässt sich wie folgt auf dem Client klonen:

cd ~/Projects
git clone git@SERVER:gitosis-admin.git

SERVER ist wiederum durch den Namen des Servers zu ersetzen. Da wir vorhin den eigenen öffentlichen SSH-Schlüssel auf den Server kopiert haben, ist kein Passwort notwendig.

Das Repository besteht grundsätzlich aus der Datei gitosis.conf zur Verwaltung der Repositories und Benutzer sowie dem Verzeichnis keydir, in dem die SSH-Schlüssel ablegt sind:

$ cd gitosis-admin/
$ ls -ln
total 8
-rw-r--r--  1 501  20  167  3 Jan 19:57 gitosis.conf
drwxr-xr-x  4 501  20  136  3 Jan 19:57 keydir

Die Datei gitosis.conf enthält im initialen Zustand folgende Zeilen:

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = tom@mymac

Der Abschnitt „group gitosis-admin“ definiert eine neue Benutzergruppe mit dem Namen „gitosis-admin“, die Schreibzugriff auf das Repository „gitosis-admin“ hat und derzeit nur aus einem Mitglied „tom@mymac“ besteht. „tom“ ist hierbei mein lokaler Benutzername, „mymac“ der Name meines Client-Rechners. Entsprechend enthält das Verzeichnis keydir eine Datei mit dem Namen tom@mymac.pub.

Ein neues Repository kann nun erzeugt werden, in dem folgende Zeilen der Datei gitosis.conf hinzufügt werden:

[group developers]
writable = test
members = tom@mymac

Das Repository hat hier den Namen „test“, gehört zur Gruppe „developers“ und nur mein eigener Benutzer „tom@mymac“ hat darauf Schreibrechte. Im Prinzip hätte es auch ausgereicht, den Bezeichner „test“ an die obige Zeile „writable = gitosis-admin“ mit Leerzeichen getrennt anzuhängen. Es ist aber aus meiner Sicht sinnvoll, gleich von Anfang an die Repositories für Projekte vom Repository für die administrativen Aufgaben zu unterscheiden.

Nach Speichern der Datei gitosis.conf wird nun gitosis-admin eingecheckt und auf den Server geschoben („push“):

git commit -a -m "Created repository test."
git push

Damit hat „tom@mymac“ Zugriff auf das Repository „git@SERVER:test.git“, das Repository selbst existiert aber noch nicht und muss entsprechend angelegt werden:

cd ~/Projects
mkdir test
cd test
git init
git remote add origin git@SERVER:test.git

Hat man bereits ein Projektverzeichnis (egal ob mit oder ohne Dateien), kann der Aufruf von „mkdir test“ entfallen. Anschließend können Dateien dem Projekt hinzugefügt und eingecheckt werden. Beispiel:

echo "This is a test file." > README
git add README
git commit -m "Initial revision."

Beim „push“ auf den Server wird schlussendlich das Repository erzeugt:

git push origin master:refs/heads/master

Verwalten von Benutzern

Bisher hat auf das erzeugte Test-Repository lediglich der Benutzer „tom@mymac“ Lese- und Schreibzugriff. Weitere Benutzer mit denselben Rechten können erstellt werden, indem diese dem Admin ihren öffentlichen SSH -Schlüssel zur Verfügung stellen. Angenommen, der Benutzer „joey@hismac“ schickt seinen Schlüssel, dann sind folgende Schritte durchzuführen:

cd ~/Project/gitosis-admin
cp ~/Download/joey@hismac keydir

In der Datei gitosis.conf ist der Benutzer der Gruppe „developers“ hinzuzufügen:

[group developers]
writable = test
members = tom@mymac joey@hismac

Dann weiter im Terminal:

git add .
git commit -m "Added joey to project test."
git push

Will man das Repository hingegen für die Allgemeinheit mit Leserechten veröffentlichen (also ohne Abfrage von Benutzername und Passwort), muss auf dem Server die Datei git-daemon-export-ok innerhalb des Repositories erzeugt werden,

sudo touch /home/git/repositories/test.git/git-daemon-export-ok

und ist dann wie folgt klonbar:

git clone git://SERVER/test.git

Damit endet dieser Artikel über Gitosis. Für weitere Dokumentation sei auf die README-Datei von gitosis verwiesen.

Kommentare, Fragen und Kritik sind wie immer herzlich willkommen.

Mit den folgenden Zeilen lässt sich für ein bestehendes lokales Repository ein Remote-Repository auf einem Gitosis anlegen und pushen:

# git remote add origin gitosis@servername:project.git
# git push origin master:refs/heads/master (Zuvor muss mindestens ein Commit bestehen.)

Konfiguration anpassen
Da das lokale Repository noch nicht mit dem Remote-Repository verknüpft wurde, muss nun die Konfiguration entsprechend angepasst werden. Dazu sind folgende Zeilen nötig:

# git config branch.master.merge refs/heads/master
# git config branch.master.remote origin

Danach kann das Repository auch ganz regulär mit git fetch und git pull synchronisiert werden. Wird ein Remote-Repository auf das lokale System geklont, besteht diese Konfiguration bereits. So kann auch alternativ das Repository gelöscht und vom Remote neu geklont werden.