OpenSimGerman/Update mit Git
From OpenSimulator
Dies ist eine Anleitung zur Verwendung von Git für OpenSimulator core Entwickler.
Installieren von Git
Linux
CLI
- Git ist ein Package das für alle modernen Linux Distributionen vorhanden ist. Installieren Sie die folgenden Packages entsprechend Ihrer OS-Umgebung:
- Debian, Ubuntu:
apt-get install git-core
- Centos: Anleitung unter http://www.how-to-linux.com/2009/01/install-git-161-on-centos-52/
- Debian, Ubuntu:
GUIs
- git-gui
- Debian, Ubuntu:
$ sudo apt-get install git-gui $ git gui
- git-cola
- Debian, Ubuntu:
$ apt-get install git-cola $ git-cola
Windows
Unter Windows benötigen Sie 2 Komponenten:
- msysgit - Das Grundmodul für Windows. Installieren Sie dieses zuerst.
- Tortoise Git - Der Git Explorer. Installieren Sie dieses als zweites Modul.
Wenn Sie msysgit installieren vergewissern Sie sich, dass Sie Unix style line endings aktiviert haben. Damit wird sichergestellt das die Zeilen-Endekennung richtig interpretiert werden, und gemischte Ergebnisse in Zukunft vermieden werden.
Git Konfiguration
Git hat eine globale wie eine lokale Konfiguration für jedes Repository. Als Erstes ist es wichtig dass Sie Ihre Emailadresse und Ihren Namen der im System benutzt werden soll wie folgt bekannt geben.
Linux:
git config user.email Deine@EMAIL.ADDR git config user.name "Dein Name"
Unter Windows benutze das Konfigurationsmenü wie folgt:
Git Repositories für OpenSimulator
Hier die Repository Url's:
Repository | Developer URL | User URL |
---|---|---|
opensim (main repository) | ssh://opensimulator.org/var/git/opensim | git://opensimulator.org/git/opensim |
Klonen des Repositry (für Core Developers)
Wenn Du ein Core Developer bist benutze die Developer URL von oben. Wenn Du kein Core Developer bist , benutze die User Url. Das erzeugen des ersten Klones kann einige Minuten in Anspruch nehmen, da das komplette Repository mit der ganzen history erzeugt und geladen wird.
Anders als mit svn können Sie mehrere Quellen definieren, von denen Sie Daten ziehen können. Wenn Sie zuerst mit einem User tree (welcher nur read only ist), können Sie später den core tree (oder einen anderen tree vom github) benutzen.
Linux
Benutzen Sie die folgende Kommandozeile:
git clone ssh://opensimulator.org/var/git/opensim
Dieses legt ein Test-Verzeichnis opensim an.
Windows
Mausklick rechts auf den Desktop (oder wo auch immer) und 'Git Clone...'
Wenn Sie nach einer Url gefragt werden geben Sie bitte folgende ein ssh://opensimulator.org/var/git/opensim. Dein Username und Dein Passwort werden dann benutzt für opensimulator.org.
Klonen des Repositry (für Nicht Core Developers)
Benutze die selbe Vorgehensweise wie oben, nur anstatt der Nutzung der ssh:// Url benutze die git:// Url. Dies ist das Äquivalent zum anonymen svn Zugang.
Konzeptionelle Veränderungen zu Subversion
Distributed source code ist ein wesentlich anderes modell zur zentralisierten source code Verwaltung. Nicht verzweifeln, am Anfang ist es für jeden etwas gewöhnungsbedürftig. Dieses blog posting ist das Beste das ich jeh zu disem Thema gesehen habe.
Der eingefleischte SVN Benutzer sollte diese Page lesengit / svn cheat sheet. Es ist eine Solide Basis um Ihre Anpassungen zu machen.
- Terminologie
- master ist der name der primären upstream branch (bei subversion trunk genannt)
- origin ist der name und die location von dem Sie Ihren Klon gezogen haben
- Versionsnummern sind SHA1 hashes, keine sequentiellen Nummern. Man benutzt in der Regel die ersten 6-8 digits der hash um mit Ihnen zu arbeiten.
- Committing
- commits sind lokal. Das heisst, sie sind schnell. Alle Konflikte werden werden während des nächsten pull geklärt. Das ist ein wesentlicher Unterschied zum SVN modell von subversion.
- normalerweise werden nur Files die Sie mit git add committed haben. Um svn ci equivalent zu benutzen geben Sie git commit -a ein.
- nach einem commit müssen Sie das Ergebnis auf ein remot repository pushen(normalerweise origin).
Gegenüberstellung Git --- SVN Befehle
Hier eine Schnellanleitung zur Benutzung von Git als Versionsverwaltung für core developer. Für normale Benutzer funktionieren diese Befehle genauso, es muss lediglich die Git:// anstatt der ssh:// URL benutzt werden.
Hier die Unix Kommandozeilenbefehle. Diese Befehle sind auch im Kontextmenü von Tortoise git vorhanden.
Ziehen des Quellcodes
git clone ssh://opensimulator.org/git/opensim-test
Dies ist das Äquivalent zu svn co
Note: Alle anderen Anweisung erwarten das Du Dich im git Verzeichnis befindest.
Updaten Deines checkout
git pull
Dies ist das Äquivalent zu svn update
Kontrolliert Veränderungen im working tree
git status
Dies ist das Äquivalent zu svn status
Übertragen einer Änderung
Beispiel:
git add file1 file2 ...
git commit
oder
git commit -a
Pushen der commiteten Änderungen
Beim ersten mal müssen Sie eine Branch zuweisen die Sie pushen wollen.
git push origin master
Nach dem ersten mal reicht ein simples git push , und git weiss dass master syncronisiert werden muss zu origin.
Achtung: commits in git sind lokal. Sie sind nicht verfügbar im Main Tree solange Du Sie nicht mit push bereit stellst. Das heisst, Sie können offline Änderungen vornehmen und diese später mit dem Netz syncronisieren.
Das Checkout auf eine spezielle Revision setzen
git reset --hard #HASHVALUE
Dieses gibt Ihnen dei Möglichkeit ganz bestimmte Versionen zu nutzen. Dies ist das Äquivalent zu svn up -R#version.
git reset dient natürlich auch um Versionensänderungen zurückzusetzen.
Resetten des tree auf master (i.e. trunk)
git pull
pro vorgehen
Erzeugen eines Patch
git format-patch #HASHVALUE
Dadurch wird ein Patch erstellt, der zum Anhängen oder Versenden per E-Mail von einem einzelnen Commit geeignet ist. Sie können auch einen Bereich von Commits angeben.
Dies ist am nächsten zu svn diff > patchfile.txt für nicht übertragene patches in subversion.
Anwenden eines Git Patch
Wenn jemand einen Git-Patch formatiert hat, können Sie ihn direkt anwenden (einschließlich aller Datei-Adds, Datei-Modus-Änderungen und ihres Änderungsprotokolleintrags) mit:
git apply patchfile.patch
Eine Änderung rückgängig machen
git revert #HASHVALUE
Dies führt die Änderung direkt zurück, wobei eine Bestätigungsnachricht diese Tatsache angibt. Es gibt kein direktes Äquivalent, obwohl dies oft erreicht wird durch:
svn diff -R revisions > revert.patch && patch -p0 < revert.patch && svn ci -m "reverting revisions"
Zurücksetzen eines Teils des tree zum Master
git checkout -- file1 file2 ...
Checkout ist eine Operation, die das Arbeitsverzeichnis aus dem Git-Repository auffüllt. Einen Git-Checkout durchführen (Master ist die implizierte Verzweigung) - file1 file2 repulsiert diese Dateien aus dem git-Repo und übergeht sie in Ihrem lokalen Verzeichnis. Das ist wie svn revert.
Differierende Änderungen
Gegen Ihre zuletzt vorgenommenen Änderungen
git diff
Von Ihren letzten Änderungen zu einer früheren Änderung
git diff #HASHVALUE
Zwischen zwei beliebigen Änderungen
git diff #HASHVALUE1 #HASHVALUE1
Branches
Erzeuge ein Branch
Um einen neuen Zweig basierend auf dem aktuellen Zweig zu erstellen, tun Sie Folgendes:
git branch <branchname>
Branch wechseln
Um zwischen den Zweigen wechseln:
git checkout <branchname>
Einen Branch verfolgen
Wenn Sie an einem bestimmten Zweig arbeiten möchten, können Sie ihn verfolgen, indem Sie eine lokale Version erstellen, auf der Sie ziehen und drücken können. Wenn Sie bereits aus dem Ursprung gezogen (oder geholt) haben, sollten Sie alle Namen der Remote-Zweige haben:
git branch -a
Zeigt alle Zweige an, lokal und entfernt. Wählen Sie einen entfernten Zweig, den Sie verfolgen möchten, und führen Sie Folgendes aus:
git branch --track <localbranchname> origin/remote/<remotebranchname>
Es wird ein neuer lokaler Zweig erstellt, der an den bestimmten entfernten Zweig pusht und zieht.