Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Git

Git [ɡɪt] ist eine freie Software zur verteilten Versionsverwaltung von Dateien, die durch Linus Torvalds initiiert wurde.

Inhalt6 Abschnitte
  1. 1. Grundidee und Entstehung
  2. 2. Verteiltes Arbeiten mit Zweigen
  3. 3. Speicherung und Sicherheit
  4. 4. Austausch zwischen Repositories
  5. 5. Einsatzgebiete und Bedeutung
  6. 6. Betriebssysteme und Bedienung

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.

Lernvideos zu Git

Weiterlesen

Microsoft Windows Microsoft Windows (englische Aussprache [ˈmaɪ.kɹoʊ.sɒft ˈwɪn.doʊz]) bzw. Windows ist eine Reihe proprietärer grafischer Betriebssystemfamilien von Microsoft … Versionsverwaltung Eine Versionsverwaltung ist ein System, das zur Erfassung von Änderungen an Dokumenten oder Dateien verwendet wird. Alle Versionen werden in einem Archiv … Datei Eine Datei (englisch file) ist in der Informationstechnologie die Zusammenstellung gleichartiger digitaler Daten, die zum Speichern auf Datenträgern oder … Kernel (Betriebssystem) Ein Kernel (englisch [ˈkɝːnəl], übersetzt Kern), auch Betriebssystemkern (oder verkürzt Systemkern), ist der zentrale Bestandteil eines Betriebssystems. Verteiltes System Ein verteiltes System ist ein Zusammenschluss unabhängiger Recheneinheiten (Knoten), die sich für den Benutzer als ein einziges System präsentieren; … Transmission Control Protocol Das Transmission Control Protocol (TCP, englisch für „Übertragungssteuerungsprotokoll“) ist ein Netzwerkprotokoll, das definiert, auf welche Art und Weise … Secure Shell Secure Shell oder SSH bezeichnet ein kryptographisches Netzwerkprotokoll für den sicheren Betrieb von Netzwerkdiensten über ungesicherte Netzwerke. Hypertext Transfer Protocol Das Hypertext Transfer Protocol (HTTP; englisch für Hypertext-Übertragungsprotokoll) ist ein 1991 eingeführtes zustandsloses Protokoll zur Übertragung von … Hypertext Transfer Protocol Secure Hypertext Transfer Protocol Secure (HTTPS; englisch für „sicheres Hypertext-Übertragungsprotokoll“) ist ein Netzwerkprotokoll im World Wide Web, … E-Mail Die oder das E-Mail (englisch [ˈiːmeɪl], im Deutschen kurz Mail; englisch electronic mail für „elektronische Post“ oder „elektronischer Brief“) ist zum … Hash-Baum Hash-Bäume sind eine Erweiterung von Hash-Listen und dienen gleichermaßen dazu, die Integrität von Daten sicherzustellen. Wenn sie die Tiger-Hashfunktion als … Concurrent Versions System Concurrent Versions System (CVS) ist ein Software-System zur Versionsverwaltung von Dateien, das hauptsächlich im Zusammenhang mit Software-Quelltext verwendet …