Πώς να χρησιμοποιήσετε το Git Shallow Clone για ταχύτερη κλωνοποίηση αποθετηρίου

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

Τι είναι η Ρηχή Κλωνοποίηση;

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

Για παράδειγμα, ο πυρήνας του Linux χρησιμοποιεί το ίδιο αποθετήριο από την αρχή του χρόνου. Έχει τελειώσει

1,1 εκατομμύρια δεσμεύσεις

. Η κλωνοποίηση αυτού μπορεί να διαρκέσει πάνω από μία ώρα σε παλαιότερο υλικό και να χρησιμοποιήσει πολλά

gigabytes

της μνήμης RAM μόνο για τη διαδικασία Git και μόνο. Φυσικά, δεν είναι τόσο τεράστιο κάθε αποθετήριο, αλλά μερικά πλησιάζουν, ακόμη και οι συνεισφέροντες πυρήνα Linux δεν θέλουν να κάθονται στο πληκτρολόγιό τους για μια ώρα παρακολουθώντας την κλωνοποίηση.

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

Αυτό έχει επίσης μεγάλα πλεονεκτήματα για τους αγωγούς συνεχούς ενσωμάτωσης (CI/CD), καθώς ο διακομιστής build πιθανότατα δεν χρειάζεται να γνωρίζει ολόκληρο το ιστορικό του Git μόνο για να δημιουργήσει την εφαρμογή. Εάν γράφετε σενάρια που λειτουργούν με τα repos του Git και ενδιαφέρονται μόνο για το περιεχόμενο, ίσως αξίζει τον κόπο να χρησιμοποιήσετε ρηχή κλωνοποίηση.

Εκτός από τον χρόνο κλωνοποίησης, τα ρηχά αποθετήρια τρέχουν πιο γρήγορα γενικά, καθώς υπάρχει λιγότερο ιστορικό για επεξεργασία κατά την εκτέλεση καθημερινών εντολών. Τα πραγματικά μεγάλα ιστορικά μπορούν επίσης να προκαλέσουν καθυστέρηση στους πελάτες GUI Git, γεγονός που μπορεί να καταστρέψει την εμπειρία.

Shallow Cloning a Git Repository

Ο ευκολότερος τρόπος για ρηχή κλωνοποίηση είναι απλώς να χρησιμοποιήσετε το

--depth

ενεργοποιημένη παράμετρος

git clone

. Αυτό θα περιορίσει τον κλώνο σε έναν συγκεκριμένο αριθμό, όπως 100 δεσμεύσεις πριν από το τρέχον αποθετήριο HEAD. Όλες οι άλλες παλαιότερες δεσμεύσεις θα περικοπούν από το ιστορικό.

git clone --depth 100 [repository_URL]

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

git clone --shallow-since="3 months" [repository_URL]

Η παράμετρος ημερομηνίας μπορεί να γίνει δεκτή

πολλές διαφορετικές μορφές

αλλά ένα απλό “Χ χρόνια/μήνες πριν” γενικά λειτουργεί καλά.

Υπάρχουν επίσης μέθοδοι για να

ρηχή διαμόρφωση ενός υπάρχοντος αποθετηρίου Git

, αλλά συνήθως είναι ακατάστατα και περιλαμβάνουν την επανεγγραφή του ιστορικού και τη μη αυτόματη εκκαθάριση όλων των παλαιών αντικειμένων από τη μνήμη cache συλλογής σκουπιδιών του Git. Θα συνιστούσαμε απλώς να προωθήσετε όλες τις αλλαγές, να αφαιρέσετε το παλιό αποθετήριο και να κάνετε εκ νέου κλωνοποίηση από το τηλεχειριστήριο, εάν θέλετε να μειώσετε το υπάρχον μέγεθος repo σας.

Ρηχή κλωνοποίηση Μόνο ένας κλάδος

Η ρηχή κλωνοποίηση μπορεί να συνδυαστεί με ένα άλλο χαρακτηριστικό Git που περιορίζει τον κλώνο μόνο σε έναν κλάδο. Εάν απλώς κατεβάζετε ένα αποθετήριο για να ελέγξετε έναν κλάδο χαρακτηριστικών, μπορείτε να εκτελέσετε αυτήν την εντολή:

git clone --depth 100 [repository_URL] --single-branch --branch=[branch]

Blobless και Treeless κλώνοι

Μια άλλη παρόμοια επιλογή που μπορεί ακόμα να διατηρήσει το ιστορικό δεσμεύσεων είναι

χρησιμοποιώντας κλώνους χωρίς φυσαλίδες

. Στο Git, τα πραγματικά περιεχόμενα του αρχείου αποθηκεύονται ως “blobs” και το Git προσθέτει πάνω από αυτά τα δέντρα και δεσμεύει ότι παρακολουθεί πώς αυτές οι σταγόνες συνδυάζονται.

Τα τετράγωνα είναι σταγόνες, τα τρίγωνα είναι δέντρα και οι κύκλοι είναι οι δεσμεύσεις που βλέπει ο χρήστης που δείχνουν τα πάντα.

Δεδομένου ότι το Git ενδιαφέρεται κυρίως μόνο για τις δεσμεύσεις και τη δομή του δέντρου, μπορείτε να επιλέξετε να παραλείψετε τις σταγόνες και να τις κατεβάσετε κατά παραγγελία όταν τις χρειάζονται. Αυτό μπορεί να επιταχύνει σημαντικά τους χρόνους κλωνοποίησης, διατηρώντας ταυτόχρονα το ιστορικό. Μπορείτε επίσης να συνδυάσετε blobless και ρηχούς κλώνους.

Για να το κάνετε αυτό, τρέξτε

git clone

με σετ φίλτρων:

git clone --filter=blob:none [repository_URL]

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

git clone --filter=tree:0 [repository_URL]

Τυπικά, ωστόσο, οι ρηχοί κλώνοι θα εξακολουθούν να είναι ταχύτεροι και οι κλώνοι χωρίς φυσαλίδες θα μεγαλώνουν σε μέγεθος με την πάροδο του χρόνου καθώς χρειάζεται πρόσβαση σε περισσότερα μέρη του αποθέματος.


HowToGeek.com



You might also like


Leave A Reply



Cancel Reply

Your email address will not be published.