Skip to content

EGit: Eclipse mit Git benutzen

Ich gebe zu, GIT ist für mich noch Neuland. Ich verstehe die groben Prinzipien, ich weiß, dass es sich von SVN und CVS sehr stark (zum Guten hin) unterscheidet und was die größten Unterschiede sind, ansonsten habe ich aber schlicht keine Erfahrung mit Git. Da Serendipity nun seine verteilten Repositories (cvs und svn) nach GitHub umgestellt hat, war das nun ein willkommener Anlass.

Meine Arbeitsweise setzt schon seit Ewigkeiten auf Eclipse auf. Ich bin vor allem Java Entwickler, aber auch für PHP (und anderes) ist das die Entwicklungsumgebung meiner Wahl. Ich bin noch von damals CVS und erst recht SVN mächtige Plugins gewohnt, die mir die Arbeit mit Versionsverwaltungen enorm erleichtern. Sie zeigen an, was sich geändert hat, erledigen das Commit der Neuerungen, holen Updates ab und mergen Änderungen in meinen lokalen Code. Ich hatte mir vor ca. einem Jahr mal angesehen, was Eclipse als Unterstützung für Git anzubieten hat: Was ich vorfand war sehr mau, die Bezeichnung Alpha Status wäre wohl übertrieben gewesen.

Das hat sich enorm geändert! Bei mir auf Arbeit wird bereits immer mehr auf Git zusammen mit Eclipse gesetzt, daher wusste ich bereits, dass das Eclipse Plugin inzwischen offenbar gut zu bedienen ist. Dies ist die Beschreibung, wie ich meine Entwicklungsumgebung aufgesetzt habe und damit meine ersten Änderungen eingecheckt habe.

Voraussetzungen

Das Beispiel bezieht sich auf ein Repository, das auf github gehostet ist, in diesem Falle sind es die Serendipity Repositories.

  • Ich gehe davon aus, dass ihr bereits einen fertig konfigurierten Account bei GitHub eingerichtet habt, vor allem solltet ihr dort die öffentliche Version eures SSH Keys hinterlegt haben.
  • Bei mir läuft Eclipse Helios, ich vermute, dass die Version aber keinen großen Unterschied macht.
  • Git sollte bei euch bereits laufen. In meinem Falle (ein Ubuntu Rechner) bedeutet das, dass ich die git Pakete schon installiert und konfiguriert habe.

Für einen Ubuntu Rechner ist das Herstellen der meisten dieser Voraussetzungen (GitHub und git Pakete) hier sehr schön beschrieben.

Installation des EGit Plugins

Wie geschrieben: Ein gut funktionierendes Eclipse Plugin ist für mich die Voraussetzung dafür, dass ich eine Versionsverwaltung benutze. Ein nicht benutzbares Plugin für Git war für mich der einzige Grund, dass ich Git nie angesehen habe. Das soll sich nun ändern.

Die Installation ist wie immer simpel: Man öffnet in Eclipse unter Help den "Eclipse Marketplace" und gibt in die Sucheingabe "git" ein. Bei mir war gleich der erste Eintrag das EGit Plugin. Sucht dieses und installiert es wie gewohnt. Danach werdet ihr aufgefordert, Eclipse neu zu starten. Tut dieses und öffnet Eclipse in eurem PHP Workspace, wir füllen diesen gleich mit neuen Projekten, die wir aus GitHub initialisieren.

Aufsetzen eines neuen Projektes aus einem GitHub Repository

Um ein GitHub Projekt in Eclipse aufzusetzen, benötigt ihr zuerst die Zugriffsinformationen des Projektes in GitHub. Geht auf die Seite eures Projektes, ihr werdet dort eine Seite finden wie diese hier:

Ihr solltet dort SSH auswählen, in der Eingabezeile erscheint dann die Information, mit der ihr auf das Repository zugreifen könnt, in diesem Falle also:

git@github.com:s9y/Serendipity.git

Nun wird dieses Projekt in Eclipse importiert. Startet Eclipse mit eurem (in diesem Fall PHP-)Workspace. In diesem öffnet ihr im (PHP) Explorer das Kontext Menü (rechte Maustaste auf eine freie Fläche dort) und wählt den Eintrag "Import" aus. Es öffnet sich ein Dialog, in dem ihr "Projects from Git" auswählt:

 

Der nächste Dialog erfordert die Information, die wir uns gerade bei GitHub abgeholt haben. Um auf das obige Projekt per SSH zuzugreifen, benötigt es die folgenden Einstellungen:

 

Als nächstes werdet ihr gefragt, welche Version (branch) ihr importieren wollt, normaler Weise dürfte das immer "master" sein. Zusätzlich werdet ihr gefragt, wohin das Repository importiert werden soll.

Achtung: Per Default ist hier immer ~/git/ eingetragen, ihr solltet das ändern, so dass das Repository in eurem Workspace erzeugt wird, sonst könnt ihr später nicht auf das angelegte Verzeichnis zugreifen.

Danach kommt der Dialog "Configure Push to Gerrit Code Review". Mal abgesehen davon, dass mir völlig unklar ist, was das sein soll: Schaltet diese Option nicht an. Bei mir klappte damit der Import nicht und es wird nicht benötigt, um das Repository zu verwalten und zuzugreifen. Habt ihr dieses alles erledigt, wird der Import Vorgang endlich gestartet.

Ist aufgefallen, dass nirgends ein Account oder Passwort bei GitHub angegeben werden musste? Das liegt daran, dass per SSH auf GitHub zugegriffen wird und ihr euch also mit eurem SSH Key einloggt. Sollte dieser nicht gefunden werden, so konfiguriert diesen unter Window -> Preferences -> General -> Network Connections -> SSH2. In meiner Unix Eclipse Umgebung liegt der im Default Verzeichnis und wurde deshalb ohne Nachbesserung gefunden.

Ist der Import erfolgreich gewesen, so werdet ihr nach den Projekt Eigenschaften gefragt. Die Dateien liegen zu dem Zeitpunkt schon lokal auf eurem Rechner. Wählt "Neues Projekt" und gebt als Namen den Verzeichnisnamen des Repositories innerhalb eures Workspaces ein (in diesem Fall also "Serendipity"). Der Project Dialog erkennt, dass es schon vorhanden ist und fügt nur noch die für Eclipse Projekte relevanten Dateien hinzu und hängt es in euren Projekt Explorer ein.

An dieser Stelle seid ihr fertig! :-)

Besonderheiten

Für Leute wie mich, die gewohnt sind mit Versionsverwaltungen wie CVS und SVN zu arbeiten, heißt es nun, ein wenig umzudenken. Bei den genannten Tools gibt es immer ein zentrales Repository und "Arbeitskopien", die darauf aufsetzen und davon abhängig sind.

Git ist da völlig anders: Es gibt kein zentrales Repository! Es gibt viele Repositories, die eigentlich alle gleichberechtigt sind, und gegenseitig Änderungen "pushen" können. Änderungen, die in einem Repository vollzogen wurden, können in ein beliebiges anderes Repository übertragen werden. "Eigentlich" bedeutet hier, dass man meist ein Repository als Hauptrepository definiert, in das alle Änderungen aller anderen Repositories hinein gepusht werden. Die anderen Repositories sind dann vergleichbar mit den Arbeitskopien.

Das hat vor allem 2 ungewohnte Auswirkungen:

  •  Man kann seine Änderungen beliebig committen. Ein Commit bezieht sich nur auf das lokale Repository, sind in diesem rückgängig zu machen usw, also all das, was man sonst von SVN oder CVS Repositories gewohnt ist.
  • Will man die Änderungen in seinem Repository in das "Hauptrepository" verschicken, aus dem man sein Repository aufgesetzt hat (in dem Fall also die Änderungen nach GitHub schicken), dann muss man seine Änderungen "pushen".

In dem EGit Plugin gibt es all das, was man aus dem SVN und dem CVS Plugin kennt: Synchronize, Commit, Merge, Update, Ignore usw. All diese Befehle (vor allem auch "Synchronize") beziehen sich hier aber auf das lokale Repository.

Möchte man seine Änderungen "pushen", öffnet man das Kontext Menü seines Projektes im Explorer. Dort findet man im Team Menü "Fetch from Upstream" (was Änderungen aus dem "Hauptrepository" abholt) und "Push to Upstream" (dies schickt die Änderungen des lokalen Repositories in das "Hauptrepository", wobei man hier auch auswählen kann, welche Änderungen es sein sollen).

Das könnt ihr auch nachvollziehen: Wenn ihr Änderungen commited, passiert im GitHub Projekt gar nichts. Erst wenn ihr einen Push ausführt, erscheinen eure Änderungen in der Liste der letzten Commits.

Fazit

Git wird viel gelobt. Mir gefällt vor allem, dass man ein lokales Repository hat, in dem man nach Belieben Änderungen vollziehen (und wieder rückgängig machen) kann, ohne dass das Auswirkungen außerhalb des eigenen Rechners hat. Das macht die Arbeitsweise mit Quellcode viel entspannter, man kann sogar lokal Branches anlegen, in denen man neues ausprobiert, die man dann verwirft oder in seinen master branch merged.

Auch finde ich es sehr angenehm, dass nicht überall .svn oder _CVS Verzeichnisse herum liegen, es gibt nur ein git Verzeichnis im Hauptverzeichnis, das das lokale Repository speichert.

Das macht alles einen sehr durchdachten Eindruck und mit dem EGit Plugin für Eclipse kann man Git (nahezu) so benutzen, wie man es aus anderen Versionsverwaltungen her gelernt hat, wenn man möchte.

Wer noch etwas detaillierter in die Materie Git einsteigen möchte, kann z.B. hier weiter lesen.

Na dann: Happy Gitting! :-D

Trackbacks

mattsches

mattsches am : mattsches via Twitter

"mattsches via Twitter" vollständig lesen
Gar nicht mehr igitt! RT @gbrockhaus: gebloggt: E#Git: #Eclipse und mit #Git benutzen http://t.co/9ofCoD3g #github
Dahie

Dahie am : Dahie via Twitter

"Dahie via Twitter" vollständig lesen
RT @gbrockhaus: gebloggt: E#Git: #Eclipse und mit #Git benutzen http://t.co/zi7SLSW2 #github
Grischa

Grischa am : Git auf ein SVN Repository aufsetzen

"Git auf ein SVN Repository aufsetzen" vollständig lesen
Mittlerweile benutze ich GIT schon seit ca. 2 Wochen und werde immer sicherer mit dessen Mechanismen. GIT bietet einfach geniale Features, gerade bei der Zusammenarbeit z.B. in Open Source Projekten wie Serendipity. Das viel einfachere Branching und Rebas

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

Grischa

Grischa am :

Ein Problem mit dem Plugin ist mir dann noch noch aufgefallen. :-(

Der Dialog "Push to Upstream" hat keinen "Abbrechen" Knopf und selbst wenn ich das Dialogfenster über das X des Betriebssystems schloss, ist es einmal passiert, dass der Push vollzogen wurde. So habe ich einige sinnlose Pushes in das S9Y Plugin Repository geschickt, die ich mühsam rückgängig machen musste. :-O

Leider ist dieser Dialog aber auch die einzige Möglichkeit zu sehen, was sich im eigenen Repository im Vergleich zum Hauptrepository geändert hat.

Da muss ich wohl noch nach einer Lösung suchen, vielleicht benutze ich es an der Stelle falsch?

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Dieses Blog erlaubt Dir, Audio Kommentare über audioboo.fm hinzuzufügen. Erstelle einen neuen Boo und gib hier den Link auf die Seite Deines Boos ein.
record
Wenn Du Deinen Twitter Namen eingibst wird Deine Timeline in Deinem Kommentar verlinkt.
Bewirb einen Deiner letzten Artikel
Dieses Blog erlaubt Dir mit Deinem Kommentar einen Deiner letzten Artikel zu bewerben. Bitte gib Deine Blog URL als Homepage ein, dann wird eine Auswahl erscheinen, in der Du einen Artikel auswählen kannst. (Javascript erforderlich)
(Bedingung: 1 Kommentare geschrieben)
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
tweetbackcheck