Το Git prune είναι μια εντολή που διαγράφει όλα τα αρχεία που δεν είναι προσβάσιμα από τον τρέχοντα κλάδο. Η εντολή prune είναι χρήσιμη όταν έχετε πολλά αρχεία στον κατάλογο εργασίας σας που δεν θέλετε να κρατήσετε. Η κύρια χρήση του git prune είναι να καθαρίσετε τον κατάλογο εργασίας σας αφού ολοκληρώσετε την εργασία σε ένα έργο. Αυτό που κάνει στην πραγματικότητα το git prune είναι, ας υποθέσουμε ότι έχετε ένα αντικείμενο ή δέσμευση που δεν είναι πλέον προσβάσιμο από τον τρέχοντα κλάδο. Στη συνέχεια, το git prune θα διαγράψει αυτό το αντικείμενο ή θα δεσμεύσει. Η βασική ιδέα είναι ότι το git prune είναι ένας τρόπος για να καθαρίσετε τον κατάλογο εργασίας σας για να τον κάνετε πιο ελαφρύ και ευκολότερο να εργαστείτε σε ένα έργο.
Εντολή:
git fetch –κλαδεύω <απομακρυσμένο>
Η εντολή git fetch –prune <remote> είναι ένας τρόπος διαγραφής όλων των αντικειμένων που δεν είναι προσβάσιμα από το απομακρυσμένο αποθετήριο. Και αν θέλετε να κλαδέψετε μόνο το απομακρυσμένο αποθετήριο και όχι να το φέρετε, μπορείτε να χρησιμοποιήσετε:
git απομακρυσμένο δαμάσκηνο προέλευσης
Αυτό θα έχει ως αποτέλεσμα το κλάδεμα του απομακρυσμένου αποθετηρίου. Εάν θέλετε να διαμορφώσετε το git ώστε να κλαδεύει το απομακρυσμένο αποθετήριο όταν το ανακτάτε, μπορείτε να χρησιμοποιήσετε:
git config –global fetch.prune true
Ας κατανοήσουμε την εντολή git prune με λίγο περισσότερες λεπτομέρειες.
Σκεφτείτε αυτό το σενάριο, ας υποθέσουμε ότι έχετε ένα έργο στο οποίο εργάζεστε. Έχετε μια δέσμη αρχείων στον κατάλογο εργασίας σας και μια δέσμευση δεν είναι προσβάσιμη από τον τρέχοντα κλάδο. Στη συνέχεια, θέλετε να διαγράψετε όλα τα αντικείμενα ή να δεσμεύσετε τα οποία δεν είναι προσβάσιμα από τον τρέχοντα κλάδο.
1. δημιουργία ενός νέου αποθετηρίου και αρχικοποίησή του
mkdir git-prune-demo-geeks
cd git-prune-demo-geeks
git init .
echo “Hello World” > hello.txt
git add hello.txt
git commit -m “πρώτη δέσμευση”
Η παραπάνω ακολουθία εντολών θα:
- δημιουργήστε ένα νέο αποθετήριο που ονομάζεται git-prune-demo-geeks
- αλλάξτε τον τρέχοντα κατάλογο σε git-prune-demo-geeks
- αρχικοποιήστε το αποθετήριο
- δημιουργήστε ένα αρχείο hello.txt με περιεχόμενο “Hello World”
- προσθέστε το αρχείο hello.txt στην περιοχή σταδίου
- δεσμεύστε το αρχείο hello.txt με το μήνυμα “first commit”
Παραγωγή:
δημιουργία αποθετηρίου
2. Τροποποιήστε το αρχείο hello.txt και δημιουργήστε ένα νέο commit
echo «Γεια από την άλλη πλευρά» > hello.txt
git add hello.txt
git commit -m “δεύτερη δέσμευση”
Παραγωγή:
Προσθήκη δέσμευσης
Αυτό θα προσθέσει τη γραμμή “Hello from the other side” στο αρχείο hello.txt και θα το δεσμεύσει με το μήνυμα “second commit”. Για να επαληθεύσουμε την παραπάνω ακολουθία εντολών, μπορούμε να χρησιμοποιήσουμε την ακόλουθη εντολή:
αρχείο καταγραφής git
Παραγωγή:
Έξοδος καταγραφής git
Εδώ, το αρχείο καταγραφής git θα εμφανίσει το ιστορικό δέσμευσης του αποθετηρίου.
3. Κάνοντας τη δέσμευση μη προσβάσιμη από τον τρέχοντα κλάδο
git reset –hard HEAD~1
Παραγωγή:
επαναφορά git
Εδώ, HEAD~1 είναι η δέσμευση που δεν είναι προσβάσιμη από τον τρέχοντα κλάδο. Και τώρα, αν προσπαθήσουμε να δούμε ξανά την έξοδο του αρχείου καταγραφής git, θα δούμε ότι η δέσμευση δεν είναι πλέον προσβάσιμη από τον τρέχοντα κλάδο, θα εμφανίσει μόνο τη δέσμευση που είναι προσβάσιμη από τον τρέχοντα κλάδο.
αρχείο καταγραφής git
Παραγωγή:
αρχείο καταγραφής git
Αυτό το αποθετήριο έχει τώρα μια δέσμευση που είναι μια αποσπασμένη δέσμευση. Έτσι, αν προσπαθήσετε να ελέγξετε τη δέσμευση, δεν θα ελέγξει τη δέσμευση, αλλά θα δημιουργήσει ένα αποκομμένο κλάδο. Η δεύτερη δέσμευση είναι μια αποσπασμένη δέσμευση και δεν εμφανίζεται πλέον στην έξοδο καταγραφής git.
git checkout HEAD~1
Παραγωγή:
Το HEAD~1 είναι η δέσμευση που αποσπάται από τον τρέχοντα κλάδο.
4. Τρέξιμο git prune
Μετά την ολοκλήρωση της αγοράς της αποσπασμένης δέσμευσης, πρέπει να επιστρέψουμε στον κύριο μέσω της εντολής git checkout και στη συνέχεια να εκτελέσουμε την εντολή git prune. Πρέπει να περάσουμε ορισμένες επιλογές στην εντολή git prune έτσι ώστε η έξοδος της εντολής να εμφανίζει αυτό που έχει οριστεί να κλαδευτεί.
git prune –dry-run –verbose
Παραγωγή:
git prune
Εδώ, η κενή έξοδος σημαίνει ότι τίποτα δεν κλαδεύεται. Επειδή κάπου στο αποθετήριο, το git διατηρεί την αναφορά δέσμευσης που έχει αποσπαστεί από τον τρέχοντα κλάδο. Έτσι, το git prune δεν θα διαγράψει τη δέσμευση. Και για να ολοκληρώσουμε το σενάριό μας, πρέπει πρώτα να καθαρίσουμε το reflog.
git reflog expire –expire=now –expire-unreachable= now –all
Αυτό θα λήξει αναγκαστικά την επανασύνδεση. Αφού αφαιρέσουμε το reflog μπορούμε να εκτελέσουμε ξανά την εντολή git prune.
git prune –dry-run –verbose –expire=now
Παραγωγή:
Κλάδεψε την απρόσιτη δέσμευση
Αυτό θα έχει ως αποτέλεσμα την εμφάνιση αναφορών αντικειμένων git SHA για commit και αντικείμενα δέντρου που δεν είναι πλέον προσβάσιμα από τον τρέχοντα κλάδο.