Heim  >  Artikel  >  Web-Frontend  >  Mini-Git, Verstehen, wie Dateien in Git-Objekten gespeichert werden

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

WBOY
WBOYOriginal
2024-08-22 18:45:03264Durchsuche

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. Die Entwicklung hat 4 Stunden gedauert, 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. Und 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. 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.

Das obige ist der detaillierte Inhalt vonMini-Git, Verstehen, wie Dateien in Git-Objekten gespeichert werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn