Mein Arbeitsplatz wurde kürzlich auf Git umgestellt und ich habe ihn geliebt (und gehasst!). Ich liebe es wirklich und es ist extrem mächtig. Der einzige Teil, den ich hasse, ist, dass es manchmal zu mächtig ist (und vielleicht ein bisschen knapp / verwirrend).
Meine Frage ist ... Wie wurde Git entworfen? Wenn Sie es nur für kurze Zeit verwenden, haben Sie das Gefühl, dass es viele obskure Workflows verarbeiten kann, die andere Versionskontrollsysteme nicht können. Aber es fühlt sich auch darunter elegant an. Und schnell!
Dies ist zweifellos teilweise auf Linus 'Talent zurückzuführen. Aber ich frage mich, ob das Gesamtdesign von Git auf etwas basiert? Ich habe über BitKeeper gelesen, aber die Konten enthalten nur wenige technische Details. Die Komprimierung, die Grafiken, das Entfernen von Revisionsnummern, das Hervorheben von Verzweigungen, Verstecken, Fernbedienungen ... Woher kam das alles?
Linus hat diesen wirklich aus dem Park geworfen und so ziemlich beim ersten Versuch! Es ist ziemlich gut zu verwenden, wenn Sie die Lernkurve hinter sich haben.
quelle
you get the feel that it can handle many obscure workflows that other version control systems could not
: Das liegt wahrscheinlich daran, dass es für den Linux-Kernel entwickelt wurde, einen notorisch hackigen, großen und komplexen Code.Antworten:
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.
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 wargitk
). 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.
quelle
Ich denke, der Hauptpunkt ist einfach, dass Git von der qualifiziertesten Person der Welt dafür entworfen wurde. Und ich spreche nicht von Talent, ich spreche von Erfahrung: Ich bezweifle, dass es jemanden gibt, der für eine Codebasis mit einer vergleichbaren Kombination aus Größe und Anzahl der Mitwirkenden wie der Linux-Kernel verantwortlich ist und sich immer noch mit dem größten Teil der Integration befasst selbst arbeiten.
Daher kannte Linus die Anforderungen und Anwendungsfälle für ein verteiltes Versionskontrollsystem besser als jeder andere. Und natürlich hat es geholfen, dass der größte Teil der Codierung, mit der er sich befasste, in C war und ein Großteil davon leistungskritisch.
Im Grunde ist es das ultimative Beispiel für das Kratzen des eigenen Juckreizes.
quelle
Es wurde ziemlich genau wie in The Git Parable beschrieben entworfen .
quelle