Wie genau funktioniert Git?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Erst mal wie funktionieren Änderungen in Git.

Bei jedem Commit werden die neuen Versionen der Dateien und der Verzeichnisstruktur gespeichert. Das praktische ist, durch Komprimierung belegen diese geänderten Versionen am Ende nur so viel Speicherplatz wie für die Änderungen bennötigt wird. Das sind die Blob und Tree Objekte, die einen meistens nicht interessieren.

Ein Commit zeigt jetzt auf einen bestimmten Stand des Repositories, also die oben erwähnten Tree und Blob Objekte, und zusätzlich noch die Commit Message, auf welchem Commit (oder bei einem Merge; auf welchen Commits) sie basieren und ähnliche Metadaten. So bekommst du eine Kette an Commits die deinen Änderungsverlauf darstellt.

Ein Branch in Git ist eigentlich jetzt super simpel, es ist einfach - mehr oder weniger - die Information auf welchem Commit der Branch gerade ist. Der ganze Rest mit der Änderungshistorie steckt in der Kette der Commits.

Das heißt, wenn du jetzt den Branch wechselst, dann muss git sich einfach nur den Commit suchen auf den der Branch zeigt, über den Commit holt es sich die Version von dem Repository die es zu dem Zeitpunkt des Commits hat und aktualisiert dann das Dateisystem in dem sich eben deine aktuelle Kopie befindet an der du arbeitest.

Durch die intelligente Verwendung von Komprimierung und dadurch, dass ein Branch einfach nur die Information darstellt auf welchem Commit er gerade ist geht der branch wechsel sehr schnell. Deswegen ist es auch so schnell einen branch zu löschen oder zu erstellen. Der branch selber enthält kaum Information, die ganzen Änderungen stecken in der Kette der Commits und eben die Daten in den Tree und Blob Objekten.

Woher ich das weiß:Berufserfahrung – Privat und beruflich damit zu tun
Ich hab bei meinem aktuellem Projekt den .git Ordner geguckt und dort ist eigentlich nichts, was auf eine Kopie von dem Projekt sich rückschließen lässt.

Der git Ordner enthält eine komprimierte Kopie aller Dateien (bzw. Unterschiede).

Branches sind wie Zweige, d. h. enthalten andere Änderungen und können mithilfe von merge wieder zusammengeführt werden.

Wenn der Branch gewechselt wird, werden alle Änderungen im .git-Ordner, die zum Branch gehören ausgecheckt und angewandt.


ChadThunderhahn 
Beitragsersteller
 04.05.2023, 11:45

ah, also werden dann die Dateien ansich nicht ersetzt, sondern deren Inhalt wird geändert (und natürlich Dateien die es vorher nicht gab werden wieder eingefügt/gelöscht). Ich muss sagen, dass ich von sowas doch eher fasziniert bin haha. Danke für die Erklärung!

2