Πως δουλεύει εσωτερικά το git

Πως δουλεύει εσωτερικά το git

Κάτι που λείπει στην εξήγηση

είναι πως ελάχιστοι καταλαβαίνουν πως δουλεύει εσωτερικά το git. Ακόμα και όσοι το χρησιμοποιούν καθημερινά χρόνια. Μια καλύτερη εσωτερική κατανόηση όμως βοηθά στο να το μάθεις καλύτερα και να καταλάβεις τα μυστήρια του.

Προσωπικά τα είχα “σκάσει” και είχα αγοράσει ένα pdf (ίσως να ήταν η πρώτη μου αγορά σε μορφή pdf). Ήταν το πρώτο βιβλίο που διάβασα για το git και ξεκινά κάπως ανορθόδοξα εξηγώντας την εσωτερική δομή. Κάποιες φορές έτσι το καταλαβαίνεις καλύτερα, αλλά δεν δουλεύει αυτό με όλους.

Σήμερα είναι τσάμπα. Κατεβάστε το, τα λέει καλύτερα:

Εκεί υπάρχουν περισσότερες λεπτομέρειες, αλλά μπακαλίστικα κάθε αρχείο στην αποθήκη παίρνει όνομα ένα hash του αρχείου. Και αν έστω και ένα bit του αρχείου αλλάξει, θα αλλάξει και το hash οπότε δεν μπορείς να αλλάξεις κάτι με το που θα μπει στην αποθήκη.

Οι κατάλογοι είναι απλά αρχεία που επιστρέφουν τα ονόματα των αρχείων, και θα αποθηκευτούν με τον ίδιο τρόπο.
image

Τα commits απλά αρχεία που δείχνουν σε ένα κατάλογο και θα αποθηκευτούν με τον ίδιο τρόπο

Είναι πραγματικά πολύ απλό. Λέτε να το βάλω σαν προγραμματιστική πρόκληση; Φτιάξε ένα δικό σου git σε 8 ώρες;

Τελικά ένα αποθετήριο μοιάζει κάπως έτσι

Μερικές παρατηρήσεις:

Κάθε ομοιότητα με το σύστημα αρχείων του UNIX είναι καθαρά συμπτωματική (μπα δεν στο ένα έχεις hashes και στο άλλο inodes).

Εξ ορισμού ένα αρχείο δεν μπορεί να υπάρχει δυο φορές στον δίσκο. Αποθηκεύετε ολόκληρος ο κατάλογος. Αν ξέρω το hash κάποιου καταλόγου μπορώ να εξάγω εύκολα ολόκληρο τον κατάλογο. Τίποτα δεν μπορεί να αλλάξει μόνο να προστεθεί. Χάνεις λίγο χώρο στον δίσκο αλλά σιγά τα αυγά[2].

Μια κύρια αλλαγή παραδείγματος του git ήταν η αποθήκευση ολόκληρων των καταλόγων και των αρχείων[1] και όχι το αρχικό αρχείο και μια σειρά από αλλαγές που εφαρμόζεις σειριακά.

[1] Στην πράξη μπορεί να έχεις συμπίεση και ψηφιακές υπογραφές.
[2] Αλήθεια πόσες φορές μετά μια εντολή git clone έχεις δει την οδηγία σβήσε τον κατάλογο .git να κερδίσεις χώρο στον δίσκο; Εγώ ποτέ :innocent:

Το σημείωμα αυτό γράφτηκε αρχικά σαν απάντηση για το OSTree, αλλά είναι μάλλον ποιο χρήσιμο σαν ξεχωριστό άρθρο. Αυτό εξηγεί και την ποιο αποσπασματική προσέγγισή του θέματος, η για να είμαστε ποιο ακριβείς την τσαπατσουλιά του :innocent:

3 «Μου αρέσει»

Και ένα άρθρο που υλοποιεί μια απλοποιημένη έκδοση των βασικών εντολών του git σε ~500 γραμμές Python.

https://wyag.thb.lt/

2 «Μου αρέσει»

Μήπως να ξεκινούσατε με ποιο απλά και να εξηγούσατε τι ακριβώς είναι το Git Hub; Επειδή δε γνωρίζουν όλοι τι είναι το Git Hub.

1 «Μου αρέσει»

Κατ’ αρχήν υπάρχει μια αντίφαση ανάμεσα στην λέξη “απλά” και στο συγκεκριμένο κείμενο. Μπαίνει βαθιά είναι προχωρημένο και με κανένα λόγο δεν μπορείς να το χαρακτηρίσεις “απλό” :slight_smile:

Και αυτό δεν είναι ελιτισμός, υπάρχουν τα εισαγωγικά κείμενα και υπάρχουν και τα πιο βαριά και όλλα έχουν θέση. Θα βρείς διάφορα κείμενα σχετικά με το git ακολουθώντας το σχετικό tag.

https://linux-user.gr/tag/git

Μην με παρεξηγήσεις, σε ευχαριστώ ειλικρινά για την παρέμβαση σου :smiley:

1 «Μου αρέσει»

Και κάτι παρόμιο.

https://www.leshenko.net/p/ugit/#

Είναι και ότι πρέπει αν θέλεις να πας λίγο παρακάτω σε Python.