𝗜𝗻𝘀𝗶𝗱𝗲 𝗚𝗶𝘁: 𝗢𝗯𝗷𝗲𝗰𝘁𝗲𝗻 & 𝗛𝗮𝘀𝗵𝗶𝗻𝗴
Git is snel en betrouwbaar vanwege de manier waarop het gegevens opslaat. Om Git onder de knie te krijgen, moet je de .git-directory begrijpen. Deze verborgen map bevat alles wat Git nodig heeft om je project bij te houden.
Git gebruikt vier hoofdtypen objecten om je werk te beheren:
- Blobs: Deze slaan de inhoud van bestanden op.
- Trees: Deze slaan mappenstructuren en bestandsnamen op.
- Commits: Deze slaan snapshots van je project en metadata op.
- Tags: Deze slaan verwijzingen naar specifieke versies op.
Git identificeert alles met behulp van hashing. Het gebruikt het SHA-1-algoritme om gegevens om te zetten in een unieke ID. Deze ID fungeert als een vingerafdruk. Als je één teken in een bestand wijzigt, verandert de hash volledig.
Hoe Git een snapshot opbouwt:
Wanneer je een bestand commit, maakt Git een keten van objecten.
- De Blob slaat de eigenlijke tekst of gegevens in je bestand op.
- De Tree koppelt die blob aan een specifieke bestandsnaam en mappenpad.
- De Commit koppelt de tree aan een auteur, een tijdstempel en een bericht.
Git slaat geen wijzigingen of "deltas" op. Het slaat snapshots op. Elke keer dat je commit, maakt Git nieuwe objecten aan. Dit maakt je geschiedenis onveranderlijk en gemakkelijk te herstellen.
Het begrijpen van deze structuur helpt je bij het oplossen van fouten, het herstellen van verloren gegevens en het beheren van complexe branches.
Probeer dit mini-project om het in actie te zien:
Initialiseer een repo: mkdir git-lab cd git-lab git init
Maak een bestand aan en vind de hash: echo 'Hello Git' > hello.txt git hash-object hello.txt
Sla het bestand op als een blob: git hash-object -w hello.txt
Controleer het objecttype en de inhoud: git cat-file -t [YOUR_HASH] git cat-file -p [YOUR_HASH]
Maak een commit en bekijk de tree: git add hello.txt git commit -m 'Initial commit' git ls-tree HEAD
Als je onder de motorkap kijkt, zie je dat Git meer is dan alleen een versiebeheertools. Het is een zeer georganiseerde database van content-addressed objecten.
Bron: https://dev.to/lotanna_obianefo/inside-git-objects-hashing-44gc
Optionele leercommunity: https://t.me/GyaanSetuAi
