Git wurde nicht so sehr entwickelt wie entwickelt .
Schauen Sie selbst. Klonen Sie das offizielle Git-Repository , öffnen Sie es in gitk
(oder Ihrem bevorzugten grafischen Git-Log-Viewer) und sehen Sie sich die frühesten Revisionen an.
Sie werden sehen, dass es ursprünglich nur die Kernfunktionalität hatte (die Objektdatenbank und den Index). Alles andere wurde von Hand gemacht . Dieser kleine Kern wurde jedoch so konzipiert, dass er einfach per Shell-Scripting automatisiert werden kann. Die frühen Benutzer von git haben ihre eigenen Shell-Skripte geschrieben, um allgemeine Aufgaben zu automatisieren. Nach und nach wurden diese Skripte in die Git-Distribution aufgenommen (siehe ein frühes Beispiel 839a7a0 ). Jedes Mal, wenn ein neuer Bedarf bestand, wurden die Skripte angepasst, um dies zu berücksichtigen. Viel später würden einige dieser Skripte in C umgeschrieben.
Diese Kombination eines sauberen, orthogonalen Kerns (den Sie bei Bedarf immer noch direkt verwenden können) mit einer oberen Schicht, die organisch darüber gewachsen ist, verleiht git seine Kraft. Natürlich gibt es auch die große Menge an seltsam benannten Befehlen und Optionen.
Die Komprimierung, die Grafiken, das Entfernen von Revisionsnummern, das Hervorheben von Verzweigungen, Verstecken, Fernbedienungen ... Woher kam das alles?
Vieles davon war am Anfang nicht da.
Während jedes Objekt einzeln komprimiert wurde und Duplikate durch ihre Benennung vermieden wurden, existierten die "Pack" -Dateien, die für die hohe Komprimierung verantwortlich sind, die wir in Git gewohnt sind, nicht. Die Philosophie am Anfang war "Speicherplatz ist billig".
Wenn mit "den Grafiken" grafische Betrachter gemeint sind gitk
, erscheinen sie später (AFAIK, die erste war gitk
). AFAIK, BitKeeper hatte auch einen grafischen Verlaufsbetrachter.
Das Entfernen der Versionsnummern, in der Tat das Kernkonzept von git, ein inhaltsadressiertes Dateisystem zum Speichern der Objekte zu verwenden, kam größtenteils von monoton . Zu dieser Zeit war monoton langsam; Wenn dies nicht der Fall wäre, hätte Linus es möglicherweise verwendet, anstatt Git zu erstellen.
Das Hervorheben der Verzweigung ist auf einem verteilten Versionskontrollsystem unvermeidlich, da jeder Klon als separate Verzweigung fungiert.
Stashing ( git stash
) ist, IIRC, ziemlich neu. Die Reflogs, die es verwendet, waren am Anfang nicht da.
Sogar Fernbedienungen waren anfangs nicht da. Ursprünglich haben Sie die Objekte von Hand mit kopiert rsync
.
Jede dieser Funktionen wurde einzeln von jemandem hinzugefügt. Nicht alle von ihnen - vielleicht nicht einmal die meisten - wurden von Linus geschrieben. Jedes Mal, wenn jemand ein Bedürfnis verspürt, das Git nicht erfüllt, kann man ein neues Feature über Git's Kernschicht "Sanitär" erstellen und es zur Aufnahme vorschlagen. Wenn es gut ist, wird es wahrscheinlich akzeptiert, was den Nutzen von git (und seine Befehlszeilenkomplexität) noch weiter verbessert.