[[Vorlage(Getestet, xenial, trusty, [:Pakete_installieren: Installation von Programmen] [:Paketquellen_freischalten/PPA: Verwenden eines PPAs] optional [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(2)]] [[Bild(git_logo.png, 64, align=left)]] [http://git-scm.com/ Git] {en} ist ein dezentrales [:Versionsverwaltung:Versionsverwaltungssystem]. Es wurde 2005 von [wikipedia:Linus_Torvalds:Linus Torvalds] als Ersatz für das damals proprietäre Programm [http://www.bitkeeper.com/ BitKeeper] {en} geschrieben, da BitKeeper vielen Kernel-Entwicklern durch Lizenzverschärfungen den Zugang zu den Kernelquellen verwehrte. Seit dem Entwicklungsstart hat sich Git äußerst rasant entwickelt. Git unterscheidet sich von einem traditionellen Programm wie [:Archiv/Subversion:Subversion]. Wichtige Eigenschaften sind: * Einfache und effiziente Arbeitsweise nach dem [wikipedia:KISS-Prinzip:] * Kein zentraler Server benötigt (wird aber dennoch häufig eingesetzt) * Unterstützung vieler Übertragungsprotokolle (HTTP, HTTPS, FTP, SSH, rsync) * Absicherung durch [:GnuPG:]-Signierung * Umfangreiche Arbeiten ohne Internetzugang möglich Andere dezentrale Versionsverwaltungssysteme sind [:Bazaar:] und [:Mercurial:]. = Installation = Folgendes Paket muss installiert [1] werden: {{{#!vorlage Paketinstallation git }}} Optional können zahlreiche Erweiterungen wie z.B. [:Grafische Oberflächen für Git:] installiert werden. == PPA == Für die aktuelle Git-Version kann ein "Personal Package Archiv (PPA) [2] genutzt werden. [[Vorlage(PPA, git-core, ppa)]] Nach dem Aktualisieren der Paketquellen kann das folgende Paket installiert werden: {{{#!vorlage Paketinstallation git, ppa }}} == Selbst kompilieren == Wenn man die neueste Version von Git verwenden will, kann man Git auch selbst kompilieren. {{{#!vorlage Builddeps git }}} Danach führt man folgende Befehle [3] 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). Diese Vorgehensweise wird von Linus Torvalds [http://article.gmane.org/gmane.linux.nfs/48295 empfohlen] {en}. Wer git erst kompilieren muss um ein lauffähiges git zu bekommen, kann das Problem durch [:wget:] umgehen: {{{#!vorlage Befehl wget https://github.com/gitster/git/archive/master.zip unzip master.zip cd git-master make make install }}} = Anwendung = == Quellcode herunterladen == Will man nur den Quellcode eines Projekts aus dem Git-Repository herunterladen, verwendet man 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 === Vor Arbeitsbeginn sollte man den eigenen Namen und eine 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 dienen der Identifizierung des Autors einer Revision, falls mehrere Entwickler an einem Projekt arbeiten. Enthalten die config-Werte Leerzeichen (z.B. Vorname und Nachname), so müssen sie in Anführungszeichen gesetzt werden, z.B.: {{{#!vorlage Befehl git config --global user.name "VORNAME NACHNAME" }}} Überprüfen kann man die Parameter ohne Angabe des Wertes, z.B.: {{{#!vorlage Befehl git config --global user.name }}} 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 Prozessorkernen 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 Programms 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. Stellt man nach einem Commit fest, dass eine Datei vergessen wurde, kann diese mit den folgenden beiden Befehlen dem vorangegangenen Commit noch hinzugefügt werden: {{{#!vorlage Befehl git add VERGESSENE_DATEI git commit --amend }}} Wobei dieses Vorgehen nicht zu empfehlen ist, wenn das Repository bereits veröffentlicht wurde (siehe folgender Absatz zum Befehl `push`). 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 den 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 }}} Diese Befehle setzen alle unbestätigten lokalen Veränderungen zurück. Mit dem nächsten Befehl kann man auflisten, welche Dateien versioniert werden: {{{#!vorlage Befehl git ls-files }}} === Auslassen mit .gitignore === Ein Beispiel, das 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 (bspw. '''stable''' und '''testing'''), kann man sich der Branches bedienen. Um bestehende Branches anzuzeigen, gibt man diesen Befehl ein: {{{#!vorlage Befehl git branch }}} Zum Anzeigen von remote Branches gibt man ein: {{{#!vorlage Befehl git branch -r }}} Um nun einen neuen Branch zu erstellen, muss nur der folgende Befehl eingegeben werden: {{{#!vorlage Befehl git branch BRANCHNAME }}} Um in eine anderen Branch zu wechseln, verwendet man diesen Befehl: {{{#!vorlage Befehl git checkout BRANCHNAME }}} Das Löschen von local und remote Branches geschieht folgendermaßen: local: {{{#!vorlage Befehl git branch -d THE_LOCAL_BRANCH }}} remote: {{{#!vorlage Befehl git push origin :THE_REMOTE_BRANCH }}} === 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 }}} = Grafische Oberflächen = Es gibt eine Reihe von grafischen Oberflächen für Git. Diese sind im Übersichtsartikel [:Grafische Oberflächen für Git:] aufgeführt. = Problembehebung = == Git und Subversion == Sollte man gezwungen sein, mit einem [:Archiv/Subversion:Subversion]-Server zu arbeiten, kann man zur lokalen Verwaltung trotzdem Git einsetzen. Man muss nur das entsprechende Paket installieren: {{{#!vorlage Paketinstallation git-svn }}} = Links = == Intern == * [:Gitolite:] - Verwaltung eines Git-Servers * [:Versionsverwaltung:] {Übersicht} Übersichtsartikel ==Extern == * [http://git-scm.com/ Projektseite] {en} * [http://www.kernel.org/pub/software/scm/git/docs/user-manual.html User Manual] {en} - offizielle Dokumentation * [http://gitref.org/ Git-Referenz] {en} - für den schnellen, aber dennoch umfangreichen Einstieg * [http://ndpsoftware.com/git-cheatsheet.html Cheatsheet] {en} - Kurzübersicht Git-Befehle * [https://www.atlassian.com/de/git/tutorial Tutorial] {de} - von Atlassian * [http://gitbu.ch/ Das deutsche Git-Buch] {de} - umfassende Materialsammlung zum Erlernen und Lehren von Git * [http://git-scm.com/book/de Pro Git] {de} {en} {fr} {nl} {pt} {ru} {zh} {ja} {ko} - mehrsprachige Dokumentation von Scott Chacon, auch als Buch erhältlich * [http://svij.org/blog/2014/10/25/git-fur-einsteiger-teil-1/ Git für Einsteiger - Teil 1] {de} - Blogbeitrag, 10/2014 * [http://svij.org/blog/2014/11/01/git-fur-einsteiger-teil-2/ Git für Einsteiger - Teil 2] {de} - Blogbeitrag, 11/2014 * [http://svij.org/blog/2015/01/12/git-fur-einsteiger-teil-3/ Git für Einsteiger - Teil 3] {de} - Blogbeitrag, 01/2015 * [http://blog.fitzer.org/linux/git-einrichtung/ Git Einrichtung] {de} - Blogbeitrag zur Repository-Einrichtung auf Server und Client, 05/2009 * [http://www.freiesmagazin.de/mobil/freiesMagazin-2008-08-bilder.html#08_08_git Git Howto] {de} - freiesMagazin 08/2008 * [github::GitHub] {en} - Kostenlose Git-Repositorien für Open-Source-Programme * [http://gitlab.org/ GitLab] {en} - dto. * [youtube:4XpnKHJAok8:Linus Torvalds über Git] {en} 14.5.2007 # tag: Versionsverwaltung, Shell