Git-lfs, για μεγάλα αρχεία στο αποθετήριο

Ένα αποθετήριο δεν περιεχέι μόνο κώδικα ή ποίηση. Συχνά περιέχει και δυαδικά αρχεία, όπως ήχους, φωτογραφίες ή βίντεο. Κάθε φορά που ένα από αυτά τα αρχεία αλλάζει, το git θα κρατήσει ένα αντίγραφο για κάθε αλλαγή. Με το χρόνο το αποθετήριο θα μεγαλώσει σε μέγεθος. Πράγματα όπως git clone θα πρέπει να κατεβάσουν κάθε έκδοση του δυαδικού αρχείου και η κατάσταση σύντομα θα γίνει εξαιρετικά άβολη και δύσχρηστη. Και στην πράξη σχεδόν ποτέ δεν θα θέλουμε να δούμε μια παλιά έκδοση ενός τέτοιου αρχείου.

Η λύση σε αυτό το πρόβλημα είναι να χρησιμοποιήσουμε ένα διαφορετικό χώρο για την αποθήκευση αυτών των αρχείων, εκτός του αποθετηρίου και να κρατήσουμε μια αναφορά για τα αρχεία αυτά στο αποθετήριο. Αυτό θα το κάνουμε με το git-lfs.

Εγκατάσταση

Στην διανομή μου υπάρχει το πακέτο git-lfs στα αποθετήρια και το εγκατέστησα από εκεί. Αν δεν υπάρχει εδώ θα βρεις πολλούς άλλους τρόπους. Το remote θα πρέπει να γνωρίζει για το git-lfs. Δηλαδή αν χρησιμοποιείς κάτι σαν το gitea θα πρέπει να το εγκαταστήσεις και στον server.

Χρήση

Θα πρέπει να χρησιμοποιήσουμε το git-lfs πριν μπει κανένα μεγάλο αρχείο στο αποθετήριο, ιδανικά με το που θα το δημιουργήσουμε

git init
git lfs install

Για να προσθέσουμε ένα αρχείο στο αποθετήριο θα χρησιμοποιήσουμε την εντολή git lfs track

git lfs track "deliverables/thesis.pdf" 
git status

θα παρατηρήσουμε ότι φτιάχτηκε ένα αρχείο με όνομα .gitattributes το οποίο θα περιέχει κάτι θα το παρακάτω

 deliverables/thesis.pdf filter=lfs diff=lfs merge=lfs -text

αλλά το αρχείο δεν μπήκε μέσα στο repository και θα πρέπει να το βάλουμε και εκεί.

git add .gitattributes
git add "deliverables/thesis.pdf" 
git status
git commit -m "Add thesis pdf"
git lfs ls-files

Αλλά να βάλεις όλα τα αρχεία ένα ένα είναι μπελάς. Ευτυχώς υπάρχει ένας καλύτερος τρόπος.

git lfs track "*.avi"
git lfs track "*sounds/*.wav"

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

Ιδιαίτερα χρήσιμο ΚΑΙ για ΝΟΝ coders ειδικά σε περιπτώσεις που έχεις το Bachelor/Master/PhD thesis σε (Xe)LaTeX και θες να βάλεις εικόνες.

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