Git
Git [freie Software zur verteilten Versionsverwaltung von Dateien, die durch Linus Torvalds initiiert wurde. ] ist eineGeschichteDurch eine Lizenzänderung des bis dahin genutzten proprietären BitKeeper-Systems konnten die Linux-Kernel-Entwickler dieses nicht mehr kostenlos verwenden, und somit blieb vielen Entwicklern der Zugang verwehrt. Daher begann Torvalds im April 2005 mit der Entwicklung einer neuen Quellcode-Management-Software und präsentierte bereits wenige Tage nach deren Ankündigung eine erste Version. Torvalds wünschte sich ein verteiltes System, das wie BitKeeper genutzt werden kann und die folgenden Anforderungen erfüllt:
Ein bereits existierendes Projekt namens Monotone entsprach den ersten beiden Anforderungen,[4] das dritte Kriterium wurde jedoch von keinem bestehenden System erfüllt. Torvalds entschied sich dagegen, Monotone an seine Anforderungen anzupassen und begann stattdessen, ein eigenes System zu entwickeln. Einer der Hauptgründe für diesen Schritt war die Arbeitsweise, für die Monotone nach Torvalds Ansicht optimiert ist. Torvalds argumentierte, dass einzelne Revisionen von einem anderen Entwickler in den eigenen Entwicklungszweig zu importieren zu Rosinenpickerei und unordentlichen Repositorien führen würde. Wenn hingegen immer ganze Zweige importiert werden, wären Entwickler gezwungen, diese aufzuräumen. Dazu sei es notwendig, auch die Möglichkeit von Wegwerf-Zweigen anzubieten.
– Linus Torvalds[4] Gits Gestaltung verwendet einige Ideen aus Monotone sowie BitKeeper, aber keinen Quellcode daraus. Es sollte ausdrücklich ein eigenständiges Versionsverwaltungssystem sein. Derzeitiger Maintainer von Git ist Junio Hamano.[5] NameDer Name „Git“ bedeutet in der britischen Umgangssprache so viel wie „Blödmann“. Linus Torvalds erklärte seine Wahl des ungewöhnlichen Namens mit einem Witz sowie damit, dass das Wort praktikabel und in der Softwarewelt noch weitgehend unbenutzt war:
– Linus Torvalds[6]
– Linus Torvalds[7] Der Name Linux wurde anfangs nicht von Torvalds selbst propagiert und nur widerwillig akzeptiert.[8] EigenschaftenGit ist ein verteiltes Versionsverwaltungssystem, das sich in einigen Eigenschaften von typischen Versionsverwaltungssystemen unterscheidet: Nicht-lineare EntwicklungSowohl das Erstellen neuer Entwicklungszweige (branching) als auch das Verschmelzen zweier oder mehrerer Zweige (merging) sind integrale Bestandteile der Arbeit mit Git und fest in die Git-Werkzeuge eingebaut.[9] Git enthält Programme, mit deren Hilfe sich die nicht-lineare Geschichte eines Projektes einfach visualisieren lässt und mit deren Hilfe man in dieser Geschichte navigieren kann. Verzweigungen („branches“) in Git sind (im Gegensatz zu anderen SCMs) sehr effektiv implementiert: Ein Branch stellt nur eine Reference, kurz ref, eine Textdatei mit einer Commit-ID, dar, die in einem Repository im Verzeichnis Kein zentraler ServerJeder Benutzer besitzt eine lokale Kopie des gesamten Repositorys inklusive der Versionsgeschichte (history). So können die meisten Aktionen lokal und ohne Netzwerkzugriff ausgeführt werden. Es wird nicht zwischen lokalen Entwicklungszweigen und Entwicklungszweigen entfernter Repositorien unterschieden. Obwohl es keinen technischen Unterschied zwischen verschiedenen Repositorien gibt (außer dem zwischen normalen und bare-Repositories auf Servern, bei denen kein Working-Tree, also die echten Dateien existiert), gilt die Kopie, auf die von einer Projekt-Homepage aus verwiesen wird, häufig als das offizielle Repositorium, in das die Revisionen der Entwickler übertragen werden. Es existieren spezielle Remote-tracking branches. Das sind Referenzen (siehe Nicht-lineare Entwicklung), die auf den Stand eines anderen Repositoriums zeigen. Datentransfer zwischen RepositorienDaten können neben dem Übertragen auf Dateisystemebene ( Kryptographische Sicherheit der ProjekthistorieDie Historie eines Projektes wird so gespeichert, dass der Hash-Wert einer beliebigen Revision (commit) auf der vollständigen Historie basiert, die zu dieser Revision geführt hat. Dadurch ist es nicht möglich, die Versionsgeschichte nachträglich zu manipulieren, ohne dass sich der Hash-Wert der Revision ändert. In der Kryptographie nennt man dies einen Hash-Baum. Einzelne Revisionen können zusätzlich markiert (tagging) und optional mit GPG digital signiert werden (signed tag), beispielsweise um den Zustand zum Zeitpunkt der Veröffentlichung einer neuen Version der Software zu kennzeichnen. Speichersystem und DateiversionierungEs gibt Versionsverwaltungssysteme (beispielsweise CVS), die für jede Datei (und jedes Verzeichnis) eigene, von allen anderen Dateien unabhängige Revisionsnummern verwalten. Für eine Datei wird nur dann eine neue Nummer erzeugt, wenn die jeweilige Datei Teil einer Commit-Operation ist. Im Gegensatz dazu weist Git bei jedem Commit allen im Repository verwalteten Dateien (und Verzeichnissen) eine neue, für alle Dateien gleiche Revisionsnummer zu. Das Abspeichern selbst erfolgt, indem im Commit-Objekt ein Verweis auf die Projektwurzel als tree-Objekt gespeichert wird, das wiederum Verweise auf blobs (binary large objects, die reinen Inhalte der Dateien ohne Identifizierung) und weitere trees (Verzeichnisse) enthält. Ein tree-Objekt verweist (wie ein Verzeichnis-Inode) mit seinen Einträgen auf SHA1-Prüfsummen, die weitere trees und blobs identifizieren, ähnlich Inode-Nummern in Dateisystemen. Wenn eine Datei in einem Commit nicht geändert wird, ändert sich auch die Checksumme nicht, und sie braucht nicht nochmals gespeichert zu werden. Die Objekte liegen im Projekt unter Säubern des RepositorysDie Daten gelöschter und zurückgenommener Aktionen und Entwicklungszweige bleiben vorhanden (und können wiederhergestellt werden), bis sie explizit gelöscht werden. InteroperabilitätEs gibt Hilfsprogramme, die Interoperabilität zwischen Git und anderen Versionskontrollsystemen herstellen. Solche Hilfsprogramme existieren unter anderem für GNU arch (git-archimport), CVS (git-cvsexportcommit, git-cvsimport und git-cvsserver), Darcs (darcs-fastconvert, darcs2git und andere), Quilt (git-quiltimport) und Subversion (git-svn). Web-InterfaceMit Gitweb gibt es eine in Perl geschriebene Weboberfläche. Der Team Foundation Server von Microsoft hat eine Git-Anbindung (Git-tf). VerwendungGit wird für die Entwicklung vieler Projekte, sowohl kommerziell als auch im Open-Source-Bereich, oft auf Plattformen wie GitHub, GitLab[12] oder BitBucket eingesetzt. So wird Git zur Versionsverwaltung des Linux-Kernels oder nach der Umstellung Microsofts auf Git 2017 von Microsoft Windows verwendet.[13] Laut Open Hub verwendeten im April 2019 rund 69 % aller dort registrierten Softwareprojekte Git.[14] Damit dominiert Git mit großem Abstand zu dem nächstplatzierten Subversion, das 25 % erreicht. Verwaltung von InhaltObwohl Git primär zur Versionsverwaltung von Quellcode entwickelt wurde, wird es auch zum Speichern von flach strukturierten (im Gegensatz zu relationalen Strukturen) Datensätzen direkt als Datei genutzt. So können Funktionen wie Versionsverwaltung, Hook, diff, Replikation und Offline-Nutzung auch für Inhalte ohne Datenbank genutzt werden.[15] Die Nutzung ist ähnlich zu NoSQL, auch wenn Git keine Indexstruktur, Abfrage oder Gleichzeitigkeit erlaubt. Der Einsatz erstreckt sich auch auf inhaltlich einfach strukturierte Systeme wie CMS[15] oder Wikis.[16][17] Unterstützte BetriebssystemeUnix/LinuxGit läuft auf fast allen modernen unixartigen Systemen wie Linux, Solaris, macOS, FreeBSD, DragonFly BSD, NetBSD, OpenBSD, AIX, IRIX. Apple liefert macOS mit einer leicht abgewandelten Git-Version aus. Hauptsächlich wird diese verwendet, um die Kompatibilität mit Apples Entwicklungsumgebung Xcode zu erhöhen.[18] WindowsEs gibt mehrere Portierungen von Git für Microsoft Windows:
TortoiseGit ist eine Erweiterung für den Windows-Explorer (Windows Shell Extension), so dass man Git unter Windows auch ohne Kommandozeile verwenden kann. TortoiseGit benötigt zusätzlich eine Git-Installation, normalerweise Git for Windows.[22] GUIsLiteratur
WeblinksCommons: Git – Sammlung von Bildern, Videos und Audiodateien
Einzelnachweise
|