„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Mini-Git, Verstehen, wie Dateien in Git-Objekten gespeichert werden

Mini-Git, Verstehen, wie Dateien in Git-Objekten gespeichert werden

Veröffentlicht am 24.08.2024
Durchsuche:654

Mini-git, Understanding How Files Are Stored in Git Objects

Gestern habe ich mir vorgenommen, eine der Kernfunktionen von Git selbst zu implementieren – insbesondere, wie Dateien gespeichert werden, was Git-Objekte sind und die Prozesse des Hashings und Komprimierens. Ich habe 4 Stunden für die Entwicklung gebraucht und in diesem Artikel werde ich Sie durch meinen Denkprozess und Ansatz führen.

Was passiert, wenn Sie eine Datei festschreiben?

Wenn Sie eine Datei in Git festschreiben, laufen unter der Haube mehrere wichtige Schritte ab:

Dateikomprimierung:

Der Inhalt der Datei wird mithilfe eines Zlib-Algorithmus komprimiert, um die Größe zu reduzieren. Dieser komprimierte Inhalt wird in der Git-Objektdatenbank gespeichert.

Hash-Berechnung:

Aus dem komprimierten Dateiinhalt wird ein eindeutiger SHA-1-Hash generiert. Dieser Hash dient als Kennung für die Datei in der Git-Objektdatenbank.

Speichern des Objekts:

Die Objektdatei wird im Verzeichnis .mygit/objects gespeichert, organisiert nach den ersten beiden Zeichen des Hashs. Diese Struktur erleichtert das effiziente Verwalten und Abrufen von Objekten.
Commit-Informationen aktualisieren:

Um zu demonstrieren, wie Dateien in Git gespeichert werden.
Ich habe die Commit-Funktionalität implementiert und dabei eine Datei berücksichtigt

  1. Für jede Datei habe ich den Hash berechnet
  2. Im Objektordner wird ein neuer Ordner erstellt, dessen Name den ersten beiden Zeichen des Hash entspricht.
  3. In diesem Ordner wird eine Datei mit dem verbleibenden Hash als Namen erstellt. (Diese Datei speichert das komprimierte Format der festgeschriebenen Datei)
  4. Erkannte Änderungen durch Vergleich des neu berechneten Hash mit dem zuletzt berechneten Hash der Datei

Veränderungen erkennen

Ich habe diesen Algorithmus basierend auf meinem eigenen Ansatz implementiert, aber Git verwendet effizientere Algorithmen für diese Vorgänge.

  1. Extrahiertes Array von Zeilen aus oldContent und newContent
  2. Eine Karte erstellt, um Zeile als Schlüssel und Index als Wert zu speichern
  3. Es wurden zwei neue Arrays erstellt, um Indizes gemeinsamer Zeilen in oldContent und newContent zu speichern 4.zB: OldCommonarray = [0 , 3], dann sind gelöschte Zeilen [1,2]

GitHub Repo
Linkedin

Vielen Dank für Ihre Zeit.

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/keerthivardhan1/mini-git-understanding-how-files-are-stored-in-git-objects-5bfb?1 Bei Verstößen wenden Sie sich bitte an Study_golang@163 .com, um es zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3