[[Vorlage(Getestet, lucid, precise)]] {{{#!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 2005 als Ersatz für das proprietäre Programm [http://www.bitkeeper.com/ BitKeeper] {en} von Linux-Maintainer [wikipedia:Linus Torvalds:] 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 [:Subversion:]. Wichtige Eigenschaften sind: * 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 * Umfangreiche Arbeiten ohne Internetzugang möglich = Installation = Folgendes Paket muss installiert [1] werden: {{{#!vorlage Paketinstallation git }}} {{{#!vorlage Hinweis Bis einschließlich [:Lucid Lynx:Ubuntu 10.04] muss stattdessen das Paket '''git-core''' installiert werden. }}} Bei Installation über das [:Software-Center:] können zahlreiche Erweiterungen (u.a. [#Graphische-Oberflaechen-fuer-Git Graphische Oberflächen für Git]) gleich mit geholt werden. == Fremdquelle == Für die aktuelle Git-Version kann ein [:PPA:] genutzt werden. [[Vorlage(PPA, git-core, ppa)]] Paket nach Einbinden installieren: {{{#!vorlage Paketinstallation, git, ppa }}} So 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 }}} Bis [:Lucid:Ubuntu 10.04] (einschließlich) muss man wieder stattdessen das Paket '''git-core''' angeben und braucht zusätzlich: {{{#!vorlage Paketinstallation libssl-dev }}} Git installieren (automatisch in '''~/bin/''')(`make install` sollte __nicht__ mit Root-Rechten ausgeführt werden) [2]: {{{#!vorlage Befehl git clone git://github.com/gitster/git cd git make make install }}} Diese Vorgehensweise wird von Linus Torvalds [http://article.gmane.org/gmane.linux.nfs/48295 empfohlen] {en}. = Anwendung = == Quellcode herunterladen == Um nur den Quellcode eines Projektes aus dem Git-Repository herunterzuladen: {{{#!vorlage Befehl git clone git://ADRESSE }}} Um bspw. den aktuellen Quellcode des Linux-Kernels in das Verzeichnis '''linux''' herunterzuladen: {{{#!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: {{{#!vorlage Befehl git clone http://ADRESSE }}} == Entwicklung mit Git == === Einrichtung === Vor Arbeitsbeginn sollte man seinen Namen und 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. Im Hinsicht auf optimale Lesbarkeit Ausgaben 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 dorthin. Das Git-Repository mit den nötigen Angaben erstellen: {{{#!vorlage Befehl git init }}} Quellcode des Programms erstellen und Datei(en) zum Git-Repository hinzufügen: {{{#!vorlage Befehl git add DATEI }}} Revision eines eventuell veränderten Quellcodes erstellen: {{{#!vorlage Befehl git commit -m "ÄNDERUNGSBESCHREIBUNG" }}} Eine beim letzten Commit vergessene Veränderung hinzufügen: {{{#!vorlage Befehl git add DATEI }}} Dann das vorhergehende Commit abändern (hierbei wird das letzte Commit verändert, also bei zuvor veröffentlichtem Repository nicht zu empfehlen): {{{#!vorlage Befehl git commit --amend }}} Will man den Quellcode nun auf einen Server laden: {{{#!vorlage Befehl git push ADRESSE BRANCHNAME }}} Hat ein anderer Entwickler den Quellcode verändert, kann man die lokale Version aktualisieren: {{{#!vorlage Befehl git pull }}} Hat man etwas am Quellcode verändert oder einen Patch eingespielt und möchte dies rückgängig machen: {{{#!vorlage Befehl git checkout -f }}} oder alternativ: {{{#!vorlage Befehl git reset --hard }}} Diese Befehle setzen alle unbestätigten lokalen Veränderungen zurück. Auflisten, welche Dateien versioniert werden: {{{#!vorlage Befehl git ls-files }}} === Auslassen mit .gitignore === 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 === Um mehrere Entwicklungszweige zu pflegen (bspw. '''stable''' und '''testing''') kann man sich der Branches bedienen und bestehende anzeigen lassen: {{{#!vorlage Befehl git branch }}} Neue Branch erstellen: {{{#!vorlage Befehl git branch BRANCHNAME }}} In andere Branch wechseln: {{{#!vorlage Befehl git checkout BRANCHNAME }}} === Patch erstellen === Ein git-Commit in einen Patch (namens '''PATCHDATEI.patch''') verwandeln (Commit-Hash (z.B. `cfe0a421d7d334499fb5de4ab2c4e2178a4630f3`) entsprechend anpassen): {{{#!vorlage Befehl git format-patch cfe0a421d7d334499fb5de4ab2c4e2178a4630f3 --stdout > PATCHDATEI.patch }}} Patch anwenden: {{{#!vorlage Befehl patch -p1 < PATCHDATEI.patch }}} == Graphische Oberflächen für Git == === gitk === gitk ist eine einfache Tk-Oberfläche für Git. Paket installieren: {{{#!vorlage Paketinstallation gitk }}} Starten und anzeigen des aktiven Branch: {{{#!vorlage Befehl gitk }}} oder aller Branches: {{{#!vorlage Befehl gitk --all }}} 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 (offizieller Teil des Git-Projektes). Mit ihr lassen sich die alltäglichen Aufgaben komfortabel erledigen. Paket installieren: {{{#!vorlage Paketinstallation git-gui, universe }}} Starten: {{{#!vorlage Befehl git gui }}} === qgit === [http://digilander.libero.it/mcostalba/ qgit] {en} ist eine [:Qt:]-basierte Oberfläche für Git, die außerhalb des Git-Projekt entwickelt wird. Paket installieren: {{{#!vorlage Paketinstallation qgit, universe }}} Auch mit dieser Oberfläche kann man bequem arbeiten. === gitg === [[Bild(./gitg.png, 300, right)]] Grafischer Repository-Betrachter für Gnome: {{{#!vorlage Paketinstallation gitg }}} == Git und andere Versionsverwaltungssysteme == Sollte man gezwungen sein mit einem [:Subversion:]-Server zu arbeiten, kann man zur lokalen Verwaltung trotzdem Git einsetzen. Erforderliches Paket installieren: {{{#!vorlage Paketinstallation git-svn }}} = 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} - freiesMagazin 08/2008 * [http://www.github.com/ GitHub] {en} - Kostenlose Git-Repositorien für Open Source-Programme * [http://www.gitorious.org/ Gitorious] {en} - dto. * [http://www.gitcasts.com/ Screencasts zu Git] {en} * [gnomeapps:giggle:] {en} - 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} – Deutschsprachiges GIT-Wiki (befindet sich im Aufbau) * [youtube::][http://www.youtube.com/watch?v=4XpnKHJAok8 Linus Torvalds über Git] {en} 14.5.2007 Versionsverwaltungssysteme (alternativ): * [:Bazaar:] - dezentral * [:Mercurial:] - dto. * [:Subversion:] - zentral # tag: Versionsverwaltung, Shell