[[Vorlage(Getestet, lucid, precise, quantal)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(3)]] [[Bild(logo.png, 110, align=left)]] [http://git-scm.com/ Git] {en} ist ein dezentrales [:Versionsverwaltung:Versionsverwaltungssystem]. Es wurde als Ersatz für das proprietäre Programm [http://www.bitkeeper.com/ BitKeeper] {en} von Linux-Maintainer [wikipedia:Linus Torvalds:] im Jahr 2005 geschrieben, da BitKeeper vielen Kernel-Entwicklern durch Lizenzverschärfungen den Zugang zu den Kernelquellen verwehrte. Die erste Version erschien wenige Tage nach der Ankündigung durch Torvalds. Seit dem Entwicklungsstart hat sich Git äußerst rasant entwickelt. Git unterscheidet sich als dezentrales System von den traditionellen Programmen wie CVS und [:Subversion:]. Es hat folgende wichtige Eigenschaften: * Einfache und effiziente Arbeitsweise nach [wikipedia:KISS-Prinzip:] * Kein zentraler Server benötigt * Unterstützung vieler Übertragungsprotokolle (HTTP, HTTPS, FTP, SSH, rsync) * Absicherung durch [:GnuPG:]-Signierung * Viel Arbeit ohne Internetzugang möglich = Installation = Folgendes Paket muss installiert [1] werden: {{{#!vorlage Paketinstallation git }}} {{{#!vorlage Hinweis Bis [:Lucid Lynx:Ubuntu 10.04] muss stattdessen das Paket '''git-core''' installiert werden. }}} Installiert man über das Ubuntu [:Software-Center:], können zahlreiche Erweiterungen, u.a. [#Graphische-Oberflaechen-fuer-Git Graphische Oberflächen für Git] gleich mit geholt werden. == Fremdquelle == Um die aktuellste Git-version zu nutzen, kann ein [:PPA:] genutzt werden. [[Vorlage(PPA, git-core, ppa)]] Nach dem Einbinden, muss das Paket noch installiert werden[1]: {{{#!vorlage Paketinstallation, git, ppa }}} Auf diesem Wege ist auch ein Update einer zuvor installierten Git-Version möglich. == Selbst kompilieren == Wenn man die neueste Version von Git verwenden will, kann man Git auch selbst kompilieren. {{{#!vorlage Builddeps git }}} Unter [:Lucid:Ubuntu 10.04] muss man wieder stattdessen das Paket '''git-core''' angeben und braucht zusätzlich: {{{#!vorlage Paketinstallation libssl-dev }}} Danach führt man folgende Befehle aus: {{{#!vorlage Befehl git clone git://github.com/gitster/git cd git make make install }}} Dadurch wird Git in '''~/bin/''' installiert (`make install` sollte __nicht__ mit Root-Rechten ausgeführt werden). Die Vorgehensweise wird von Linus Torvalds selbst [http://article.gmane.org/gmane.linux.nfs/48295 empfohlen] {en}. = Anwendung = == Quellcode herunterladen == Will man nur den Quellcode eines Projektes aus dem Git-Repository herunterladen, öffnet man ein Terminal [2] und verwendet den Befehl {{{#!vorlage Befehl git clone git://ADRESSE }}} Um beispielsweise den aktuellen Quellcode des Linux-Kernels in das Verzeichnis '''linux''' herunterzuladen, braucht man diesen Befehl: {{{#!vorlage Befehl git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux }}} Falls man hinter einer Firewall sitzt und der Zugriff über den Port `9418` gesperrt ist, kann man versuchen, über den fast immer offenen Port 80 auf das Repository zuzugreifen. Der entsprechende Befehl sieht folgendermaßen aus: {{{#!vorlage Befehl git clone http://ADRESSE }}} == Entwicklung mit Git == === Einrichtung === Bevor man mit der Arbeit beginnt, sollte man seinen Namen und seine E-Mail-Adresse eintragen: {{{#!vorlage Befehl git config --global user.name NAME git config --global user.email EMAIL@ADRESSE.de }}} Diese Daten erscheinen in der Beschreibung einer Veränderung und sind wichtig, um den Autor einer Revision identifizieren zu können, wenn mehrere Entwickler an einem Projekt arbeiten. Um die Lesbarkeit zu erhöhen, sollte man die Ausgaben mit den folgenden Befehlen einfärben: {{{#!vorlage Befehl git config --global color.ui "auto" }}} Für Computer mit mehreren Prozessor-Kernen empfiehlt sich diese Option: {{{#!vorlage Befehl git config --global pack.threads "0" }}} === Grundlagen === Zuerst erstellt man einen Ordner für das Projekt und wechselt in diesen Ordner. Dort führt man nun den Befehl {{{#!vorlage Befehl git init }}} aus. Der Befehl erstellt das Git-Repository mit den nötigen Angaben. Nun erstellt man den Quellcode des Programmes und fügt die Datei(en) mit dem Befehl {{{#!vorlage Befehl git add DATEI }}} zum Git-Repository hinzu. Hat man nun wieder etwas am Quellcode verändert, erstellt man mit {{{#!vorlage Befehl git commit -m "ÄNDERUNGSBESCHREIBUNG" }}} eine Revision. Wenn man beim letzten Commit eine Veränderung vergessen hat, kann man diese mit {{{#!vorlage Befehl git add DATEI }}} hinzufügen, und dann das vorhergehende Commit mit {{{#!vorlage Befehl git commit --amend }}} abändern (hierbei wird das letzte Commit verändert, also bei zuvor veröffentlichtem Repository nicht zu empfehlen) Will man den Quellcode nun auf einen Server laden, führt man diesen Befehl aus: {{{#!vorlage Befehl git push ADRESSE BRANCHNAME }}} Hat nun ein anderer Entwickler etwas am Quellcode verändert, kann man die lokale Version mit dem Befehl {{{#!vorlage Befehl git pull }}} aktualisieren. Wenn man nun etwas am Quellcode verändert oder einen Patch eingespielt hat, dies aber rückgängig machen möchte, benutzt man {{{#!vorlage Befehl git checkout -f }}} oder alternativ {{{#!vorlage Befehl git reset --hard }}} Dies setzt alle unbestätigten lokalen Veränderungen zurück. Hiermit kann man auflisten, welche Dateien versioniert werden: {{{#!vorlage Befehl git ls-files }}} === Auslassen mit .gitignore === Hier ein Beispiel, was für jedes Projekt angepasst werden kann: {{{#!code bash # generic files to ignore # backup files (*~) and vim swap file (.swp), MacOS dir file (.DS_Store) *~ *.lock *.DS_Store .*.swp *.out # IDE files to ignore (Netbeans, Eclipse) nbproject/private/ .classpath .project .settings # ignore generated .class files *.class # except this file !.gitignore }}} === Branches === Hat man mehrere Entwicklungszweige zu pflegen, wie beispielsweise '''stable''' oder '''testing''', kann man sich der Branches bedienen. Um bestehende Branches anzuzeigen, gibt man diesen Befehl ein: {{{#!vorlage Befehl git branch }}} Um nun eine neue Branch zu erstellen, muss nur der folgende Befehl eingegeben werden: {{{#!vorlage Befehl git branch BRANCHNAME }}} Um in eine andere Branch zu wechseln verwendet man den diesen Befehl: {{{#!vorlage Befehl git checkout BRANCHNAME }}} === Einen Patch erstellen === Ein git-Commit kann recht einfach, z.B. mit {{{#!vorlage Befehl git format-patch cfe0a421d7d334499fb5de4ab2c4e2178a4630f3 --stdout > PATCHDATEI.patch }}} in einen Patch (namens '''PATCHDATEI.patch''') verwandelt werden. Der Commit-Hash (z.B. `cfe0a421d7d334499fb5de4ab2c4e2178a4630f3`) ist entsprechend anzupassen. Mit folgendem Befehl kann der Patch dann angewandt werden: {{{#!vorlage Befehl patch -p1 < PATCHDATEI.patch }}} == Graphische Oberflächen für Git == === gitk === gitk ist eine einfache Tk-Oberfläche für Git, die über das Paket {{{#!vorlage Paketinstallation gitk }}} installiert werden kann. Zum Start verwendet man diesen Befehl: {{{#!vorlage Befehl gitk gitk --all }}} Im zweiten Fall werden alle Branches gezeigt, nicht nur der aktive Branch. Das Programm git-gui wird zusätzlich benötigt, wenn z.B. git blame Funktionalität innerhalb von gitk genutzt wird. === git-gui === git-gui ist die Standardoberfläche für Git, die über das Paket {{{#!vorlage Paketinstallation git-gui, universe }}} installiert werden kann. Zum Start verwendet man diesen Befehl: {{{#!vorlage Befehl git gui }}} Mit ihr lassen sich die alltäglichen Aufgaben mit Git komfortabel erledigen. Sie ist ein offizieller Teil des Git-Projektes. === qgit === [http://digilander.libero.it/mcostalba/ qgit] {en} ist eine [:Qt:]-basierte Oberfläche für Git, die nicht vom Git-Projekt, sondern extern entwickelt wird. Installiert wird sie über das Paket: {{{#!vorlage Paketinstallation qgit, universe }}} Auch mit dieser Oberfläche kann man bequem die alltäglichen Dinge der Versionsverwaltung erledigen. === gitg === [[Bild(./gitg.png, 300, right)]] Grafischer Repository-Betrachter für Gnome: {{{#!vorlage Paketinstallation gitg }}} == Git und andere Versionsverwaltungssysteme == Falls man gezwungen ist, mit einem [:Subversion:]- Server zu arbeiten, kann man zur lokalen Verwaltung trotzdem Git einsetzen. Man muss nur das entsprechende Paket installieren. Für Subversion ist das {{{#!vorlage Paketinstallation git-svn }}} ##und für CVS ist das: ##{{{#!vorlage Paketinstallation ##git-cvs ##}}} = Links = * [http://git-scm.com/ Projektseite] {en} * [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html Offizielle Dokumentation] {en} * [http://gitref.org/ Git-Referenz für schnellen aber dennoch umfangreichen Einstieg] {en} * [http://www.freiesmagazin.de/mobil/freiesMagazin-2008-08-bilder.html#08_08_git Git Howto] {de} in freiesMagazin 08/2008 * [http://www.github.com/ GitHub] {en} - bietet kostenlose Git-Repositorys für Open Source-Programme * [http://www.gitorious.org/ Gitorious] {en} - bietet kostenlose Git-Repositorys für Open Source-Programme * [http://www.gitcasts.com/ Screencasts zu Git] {en} * [youtube::][http://www.youtube.com/watch?v=4XpnKHJAok8 Linus Torvalds über Git] {en} 14.5.2007, [1h-10m-15s] * [http://live.gnome.org/giggle Giggle] {en} - eine GUI für Git * [http://blog.fitzer.org/linux/git-einrichtung/ Git Einrichtung] {de} – Blogbeitrag 05/2009 über Repository-Einrichtung auf Server und Client * [http://git-wiki.de Git Wiki] {de} – Ein deutschsprachiges GIT-Wiki (befindet sich noch im Aufbau) # tag: Versionsverwaltung, Shell