Wikipedia · einfach zusammengefasst · Stand
Git
Git [ɡɪt] ist eine freie Software zur verteilten Versionsverwaltung von Dateien, die durch Linus Torvalds initiiert wurde.
Inhalt6 Abschnitte
Grundidee und Entstehung
Git ist eine freie Software zur verteilten Versionsverwaltung von Dateien. Eine Versionsverwaltung zeichnet Änderungen auf, sodass verschiedene Arbeitsstände nachvollzogen, verglichen und zusammengeführt werden können. Git wurde vor allem für Quellcode entwickelt, kann aber grundsätzlich beliebige Dateien verwalten. Es steht unter der GNU General Public License, Version 2, und wurde hauptsächlich in C sowie zusätzlich unter anderem in Perl, Tcl, Python, Shellskript und Rust geschrieben.
Linus Torvalds begann im April 2005 mit der Entwicklung, nachdem die Linux-Kernel-Entwickler das zuvor eingesetzte proprietäre System BitKeeper infolge einer Lizenzänderung nicht mehr kostenlos verwenden konnten. Bereits wenige Tage nach der Ankündigung erschien eine erste Version. Das neue System sollte verteilte Arbeitsabläufe unterstützen, sehr sicher gegen unbeabsichtigte und böswillige Verfälschungen sein und eine hohe Leistung erreichen. Git übernahm Ideen aus BitKeeper und Monotone, jedoch keinen Quellcode. Der heutige Maintainer, also Hauptverantwortliche für die Pflege, ist Junio Hamano.
Verteiltes Arbeiten mit Zweigen
Jeder Benutzer besitzt eine lokale Kopie des gesamten Repositorys einschließlich der Versionsgeschichte. Ein Repository ist der verwaltete Projektspeicher mit Dateien, Änderungen und Metadaten. Deshalb lassen sich die meisten Git-Aktionen ohne Netzwerkzugriff ausführen. Technisch gibt es keinen zentralen Server und keinen grundsätzlichen Unterschied zwischen den einzelnen Kopien. Häufig wird dennoch das auf der Projekt-Homepage angegebene Repository organisatorisch als offizielles Repository behandelt. Ein bare-Repository auf einem Server enthält dabei keinen Working-Tree, also keine ausgecheckten Arbeitsdateien.
Git unterstützt eine nicht-lineare Entwicklung: Branching bezeichnet das Erstellen von Entwicklungszweigen, Merging das Zusammenführen mehrerer Zweige. Ein Branch ist sehr platzsparend umgesetzt und besteht lediglich aus einer Reference, kurz ref: einer Textdatei mit der ID eines Commits, die auf diesen Commit verweist. Sie liegt beispielsweise als .git/refs/heads/master für den master-Branch vor. Aus den Eltern-Commits eines Commits lässt sich die Verzweigungsstruktur rekonstruieren. Git kann diese Struktur visualisieren und erlaubt die Navigation durch die Projektgeschichte.
Dadurch können einzelne Funktionen oder Entwickler jeweils eigene Branches oder Repositories verwenden. Ein Maintainer kann Änderungen anschließend durch einen Merge oder per Cherry-pick in den Hauptzweig übernehmen. Cherry-pick bedeutet, dass gezielt ein einzelner Commit übernommen wird. Remote-tracking branches sind Referenzen, die den bekannten Stand eines Zweiges in einem anderen Repository abbilden.
Speicherung und Sicherheit
Bei jedem Commit erhält der gesamte verwaltete Projektzustand eine gemeinsame neue Revision. Das unterscheidet Git etwa von CVS, wo Dateien und Verzeichnisse voneinander unabhängige Revisionsnummern besitzen. Ein Commit ist ein gespeicherter Projektstand mit zugehörigen Informationen und Verweisen.
Ein Commit-Objekt verweist auf die Projektwurzel in Form eines tree-Objekts. Trees bilden Verzeichnisse ab und verweisen über SHA1-Prüfsummen auf weitere Trees oder auf Blobs. Ein Blob („binary large object“) enthält ausschließlich den Inhalt einer Datei, jedoch nicht deren Namen. Bleibt eine Datei unverändert, bleibt ihre Prüfsumme gleich und ihr Inhalt muss nicht erneut gespeichert werden. Die Objekte befinden sich unter .git/objects. Über den Hash-Wert lässt sich jeder Commit eindeutig identifizieren, auslesen, zusammenführen oder als Ausgangspunkt eines neuen Zweiges verwenden.
Die Projekthistorie ist kryptographisch verkettet: Der Hash-Wert eines Commits hängt von der gesamten Geschichte ab, die zu ihm geführt hat. Eine nachträgliche Veränderung der Geschichte verändert daher auch den Hash-Wert. Eine solche Struktur heißt Hash-Baum. Revisionen können außerdem mit Tags markiert werden. Ein Tag kennzeichnet beispielsweise den Projektstand bei der Veröffentlichung einer neuen Version und kann als signed tag mit GPG digital signiert werden.
Daten aus gelöschten oder zurückgenommenen Aktionen und Branches bleiben zunächst erhalten und können wiederhergestellt werden. Erst ein ausdrückliches Säubern des Repositorys entfernt sie.
Austausch zwischen Repositories
Repositories können Daten über das Dateisystem oder verschiedene Netzwerkprotokolle austauschen. Git besitzt ein eigenes effizientes Protokoll über TCP-Port 9418 (git://). Es dient nur zum Fetching und Cloning, also zum Abrufen beziehungsweise erstmaligen Kopieren eines Repositorys. Für Schreiboperationen wird meist SSH (ssh://) verwendet. Möglich sind außerdem HTTP, HTTPS sowie die weniger effizienten Verfahren FTP und rsync.
Änderungen können als Patches per E-Mail an Entwickler oder Mailinglisten gesendet werden. Alternativ lassen sie sich über Review-Systeme wie Gerrit prüfen. Auf Plattformen wie GitHub oder Bitbucket kann ein Entwickler einen Branch hochladen und dessen Übernahme vorschlagen; bei Zustimmung wird er mit dem Projekt zusammengeführt.
Hilfsprogramme ermöglichen den Austausch mit anderen Versionskontrollsystemen. Dazu gehören Werkzeuge für GNU arch, CVS, Darcs, Quilt und Subversion, beispielsweise git-archimport, git-cvsimport, git-cvsserver, git-quiltimport und git-svn.
Einsatzgebiete und Bedeutung
Git wird in kommerziellen und in Open-Source-Projekten eingesetzt, häufig zusammen mit Softwareentwicklungsplattformen. Zu den bedeutenden Beispielen gehören der Linux-Kernel und Microsoft Windows, dessen Entwicklung Microsoft 2017 auf Git umstellte. Laut Open Hub nutzten im Juni 2025 rund 80 % der dort registrierten Softwareprojekte Git. Das zweitplatzierte Subversion erreichte 17 %.
Obwohl Git für Quellcode entstand, eignet es sich auch zur Verwaltung flach strukturierter Datensätze, die unmittelbar als Dateien gespeichert werden. Dabei können unter anderem Versionsverwaltung, Hooks, Diffs, Replikation und Offline-Nutzung eingesetzt werden. Ein Hook ist eine automatisch bei einem bestimmten Git-Ereignis ausgeführte Aktion; ein Diff zeigt Unterschiede zwischen Versionen. Diese Verwendung ähnelt teilweise NoSQL, Git bietet jedoch keine Indexstruktur, keine Abfragesprache und keine Steuerung gleichzeitiger Zugriffe. Auch einfach strukturierte Content-Management-Systeme und Wikis können Inhalte mit Git verwalten.
Betriebssysteme und Bedienung
Git läuft auf fast allen modernen unixartigen Systemen, darunter Linux, Solaris, macOS, FreeBSD, DragonFly BSD, NetBSD, OpenBSD, AIX und IRIX. Apple liefert macOS mit einer leicht veränderten Git-Version aus, vor allem zur besseren Zusammenarbeit mit der Entwicklungsumgebung Xcode.
Für Microsoft Windows gibt es mehrere Lösungen. Git for Windows ist die Portierung des Git-Projekts und wurde früher unter dem Namen msysGit entwickelt. Mit dem Modul posh-git lässt es sich auch über PowerShell nutzen. Außerdem enthält die Unix-ähnliche Cygwin-Umgebung Git. TortoiseGit erweitert den Windows-Explorer um eine grafische Bedienung, benötigt aber zusätzlich eine Git-Installation, normalerweise Git for Windows.
Git kann über die Kommandozeile, grafische Programme und Weboberflächen bedient werden. Gitweb, in Perl geschrieben, war eine der ersten Weboberflächen und kann beispielsweise Unterschiede zwischen zwei Commits darstellen. Heute bieten zahlreiche Softwareentwicklungsplattformen eigene Weboberflächen. Viele integrierte Entwicklungsumgebungen besitzen ebenfalls eine Git-Integration; daneben existieren eigenständige grafische Git-Programme.