Πως δουλεύει εσωτερικά το git
Κάτι που λείπει στην εξήγηση
είναι πως ελάχιστοι καταλαβαίνουν πως δουλεύει εσωτερικά το git. Ακόμα και όσοι το χρησιμοποιούν καθημερινά χρόνια. Μια καλύτερη εσωτερική κατανόηση όμως βοηθά στο να το μάθεις καλύτερα και να καταλάβεις τα μυστήρια του.
Προσωπικά τα είχα “σκάσει” και είχα αγοράσει ένα pdf (ίσως να ήταν η πρώτη μου αγορά σε μορφή pdf). Ήταν το πρώτο βιβλίο που διάβασα για το git και ξεκινά κάπως ανορθόδοξα εξηγώντας την εσωτερική δομή. Κάποιες φορές έτσι το καταλαβαίνεις καλύτερα, αλλά δεν δουλεύει αυτό με όλους.
Σήμερα είναι τσάμπα. Κατεβάστε το, τα λέει καλύτερα:
Εκεί υπάρχουν περισσότερες λεπτομέρειες, αλλά μπακαλίστικα κάθε αρχείο στην αποθήκη παίρνει όνομα ένα hash του αρχείου. Και αν έστω και ένα bit του αρχείου αλλάξει, θα αλλάξει και το hash οπότε δεν μπορείς να αλλάξεις κάτι με το που θα μπει στην αποθήκη.
Οι κατάλογοι είναι απλά αρχεία που επιστρέφουν τα ονόματα των αρχείων, και θα αποθηκευτούν με τον ίδιο τρόπο.
Τα commits απλά αρχεία που δείχνουν σε ένα κατάλογο και θα αποθηκευτούν με τον ίδιο τρόπο
Είναι πραγματικά πολύ απλό. Λέτε να το βάλω σαν προγραμματιστική πρόκληση; Φτιάξε ένα δικό σου git σε 8 ώρες;
Τελικά ένα αποθετήριο μοιάζει κάπως έτσι
Μερικές παρατηρήσεις:
Κάθε ομοιότητα με το σύστημα αρχείων του UNIX είναι καθαρά συμπτωματική (μπα δεν στο ένα έχεις hashes και στο άλλο inodes).
Εξ ορισμού ένα αρχείο δεν μπορεί να υπάρχει δυο φορές στον δίσκο. Αποθηκεύετε ολόκληρος ο κατάλογος. Αν ξέρω το hash κάποιου καταλόγου μπορώ να εξάγω εύκολα ολόκληρο τον κατάλογο. Τίποτα δεν μπορεί να αλλάξει μόνο να προστεθεί. Χάνεις λίγο χώρο στον δίσκο αλλά σιγά τα αυγά[2].
Μια κύρια αλλαγή παραδείγματος του git ήταν η αποθήκευση ολόκληρων των καταλόγων και των αρχείων[1] και όχι το αρχικό αρχείο και μια σειρά από αλλαγές που εφαρμόζεις σειριακά.
[1] Στην πράξη μπορεί να έχεις συμπίεση και ψηφιακές υπογραφές.
[2] Αλήθεια πόσες φορές μετά μια εντολή git clone
έχεις δει την οδηγία σβήσε τον κατάλογο .git
να κερδίσεις χώρο στον δίσκο; Εγώ ποτέ
Το σημείωμα αυτό γράφτηκε αρχικά σαν απάντηση για το OSTree, αλλά είναι μάλλον ποιο χρήσιμο σαν ξεχωριστό άρθρο. Αυτό εξηγεί και την ποιο αποσπασματική προσέγγισή του θέματος, η για να είμαστε ποιο ακριβείς την τσαπατσουλιά του