Apr 11 2011

Git: fatal: no matching remote head

Diese lustige Meldung habe ich beim Clonen eines neuen Repos erhalten und gewundert warum es nicht funktioniert, weil ich das egtl immer so clone:

git clone ssh://myuser@server/home/myuser/repos/myrepo newrepoclone

Nach ein wenig Googelei habe ich dann herausgefunden, dass man wohl zunächst lokal ein Repo initialisieren sollte und dann einen remote origin hinzufügen. Dann funktioniert es wohl. Ausprobiert habe ich es nicht. Stattdessen habe ich mir die Versionen von Git genauer angeschaut. Das leere remote Repo lag dabei auf einer 1.7er Version. Mein Server, auf dem ich es versucht habe zu clonen, hatte allerdings nur die 1.5!

Nach einem Update auf 1.7 konnte ich dann das Repo wie gewohnt clonen und erhielt nicht mehr einen Error, sondern eine gewohnte Warnung:

warning: You appear to have cloned an empty repository.

Hoffe es hilft jemanden weiter, viel Spaß und Erfolg ;)


Apr 7 2011

Repositories mit Git und SSH auf Ubuntu

Um meinem Versprechen aus vergangenen Posts nachzukommen, möchte ich ein ganz kurzes Tutorial vorstellen, das die Grundkniffe von Git auf der Konsole vorstellt. In diesem Post zeige ich, wie man ein “zentrales” Repository mit Git erstellt und dieses dann bei sich lokal auscheckt. Zudem werde ich versuchen euch das Arbeiten mit Branches etwas nächer zu bringen.

Zunächst brauchen wir ein frisches, neues Repository, mit dem wir arbeiten möchten/wollen/sollen. Ich nehme an, dass der versierte Leser den umgang mit einem Konsolentool beherrscht (hier ist speziell die Rede von Ubuntu und dem Teminal). Zudem setze ich voraus, dass ein vServer (oder ein ähnlicher Server, z.B. root-Server oder ein Heimserver) vorhanden ist, auf den ihr root Zugriff habt.

Da Git das Tool der Wahl ist, brauchen wir es sowohl auf dem Host-System (auch Remote genannt) als auch auf dem Client (z.B. euer lokaler Rechner). Ich führe das Beispiel vor, wenn euer Host System ein Heimserver ist mit der IP 192.168.1.102 und dem Benutzernamen “hostuser”

Um Git lokal (Ubuntu 10.04 oder 10.10, oder was ihr mögt…) nutzen zu können, müssten wir es installieren. Das geschieht mit folgendem Befehl:

sudo apt-get install git-core

Im zweiten Schritt loggen wir uns per SSH auf dem Host-System unter dem Benutzernamen hostuser ein und installieren auch hier Git:

ssh hostuser@192.168.1.102
sudo apt-get install git-core

Repositories lege ich (persönlich) gerne strukturiert im repos Ordner im Home-Folder des Benutzers ein. Aber das ist jedem selbst überlassen, hier gibt es keine speziellen Vorgaben:

mkdir -p /home/hostuser/repos

Nun wechseln wir in das Verzeichnis, um hier ein Repository zu erstellen (ja, es ist die Langvariante, für alle Besserwisser *g* ):

cd /home/hostuser/repos

Ein Repository ist bei Git im Grunde nur ein Verzeichnis, welches Git informationen enthält. Ich nehme hier an, dass wir ein PHP Projekt starten möchten, also erstellen wir zunächst ein Verzeichnis und wechseln zu direkt zu diesem:

mkdir php.myproject.git
cd php.myproject.git

Die Namensgebung ist auch hier nur eine Vorliebe von mir. Es ist jedem selbst überlassen, wie man das Verzeichnis benennt. In dem Verzeichnis selbst initiieren wir ein leeres Git repo.

git init --bare --share

Damit haben wir schon einene großen teil geschafft. Nun loggen wir uns mit dem “exit” oder “logout” befehl wieder aus, sodass wir nun auf dem lokalen System dieses erzeugte Repository clonen können. Dies geschieht wie folgt (wohlgemerkt auf dem lokalen Rechner, nicht auf dem Server):

git clone ssh://hostuser@192.168.1.102/home/hostuser/repos/php.myproject.git php.myproject.git

Falls alles wie geplant funktioniert hat, solltet ihr eine Passwortabfrage erhalten (wenn der Zugang zum server vernünftig gesichert ist). Im hinteren Teil des Befehls seht ihr das Zielverzeichnis in das geclont wird (euer lokales Repository). Nun wechseln wir in dieses Verzeichnis und führen…

git status

…aus. Hier solltet ihr einige erste Informationen zum lokalen repo bekommen. Damit sind wir eigentlich schon fertig und können mit dem Repository arbeiten. Nun kann man noch einige interessante Dinge ausprobieren. Mit…

git branch -r

… erfahrt ihr, welche branches euer Remote-Repository zur Verfügung hat. Um einen neuen Branch (lokal) zu eröffnen, führt man git branch aus, in etwa so:

git branch v1.0.0

Hier habe ich meinen neuen Branch v1.0.0 benannt. Wie ihr den Branch benennt ist auch hier eurer Phantasie überlassen. Mit git checkout wechselt man zu diesem neuen Branch:

git checkout v1.0.0

Um diesen Branch nun auch auf das Remote System zu bringen, kann man ganz einfach folgenden gut Befehl verwenden:

git push origin v1.0.0

Damit wird der Branch in euer “zentrales” Repo geschoben (damit auch andere diesen zur Verfügung haben).


Jun 18 2010

Versionsverwaltung mit Git und EGit

Da meine Ansprüche an ein Versionsverwaltungssystem gewachsen sind, habe ich mich dazu entschlossen von SVN auf GIT zu wechseln. Git ist im Gegensatz zu SVN ein verteiltes Verwaltungssystem. D.h. der Entwickler kann auch ein eigenes Repository lokal auf dem seinem Rechner betreiben. Der größte Vorteil von Git liegt im Umgang mit Branches (bzw. das Mergen), was auch mich dazu bewegt hatte Git einzusetzen.

der Umstueg benötigt etwas Eingewöhnung und eine gewisses Umdenken. Meiner Meinung nach ist es erforderlich in bestimmten Phasen (Repositories clonen, pushen, usw.) schon mit der Konsole arbeiten. Für die Übersicht und “gefühlte Sicherheit” kann man (sofern man Eclipse nutzt) EGit, das Plugin für Eclipse, benutzen. Ich versuche in den nächsten Tagen ein etwas ausführlicheres Tutorial zum Umstieg zu schreiebn. Bis dahin :)