Git – git-prune

Το 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”

Παραγωγή:

Output

δημιουργία αποθετηρίου

2. Τροποποιήστε το αρχείο hello.txt και δημιουργήστε ένα νέο commit

echo «Γεια από την άλλη πλευρά» > hello.txt

git add hello.txt

git commit -m “δεύτερη δέσμευση”

Παραγωγή:

Output

Προσθήκη δέσμευσης

Αυτό θα προσθέσει τη γραμμή “Hello from the other side” στο αρχείο hello.txt και θα το δεσμεύσει με το μήνυμα “second commit”. Για να επαληθεύσουμε την παραπάνω ακολουθία εντολών, μπορούμε να χρησιμοποιήσουμε την ακόλουθη εντολή:

αρχείο καταγραφής git

Παραγωγή:

Output

Έξοδος καταγραφής git

Εδώ, το αρχείο καταγραφής git θα εμφανίσει το ιστορικό δέσμευσης του αποθετηρίου.

3. Κάνοντας τη δέσμευση μη προσβάσιμη από τον τρέχοντα κλάδο

git reset –hard HEAD~1

Παραγωγή:

Output

επαναφορά git

Εδώ, HEAD~1 είναι η δέσμευση που δεν είναι προσβάσιμη από τον τρέχοντα κλάδο. Και τώρα, αν προσπαθήσουμε να δούμε ξανά την έξοδο του αρχείου καταγραφής git, θα δούμε ότι η δέσμευση δεν είναι πλέον προσβάσιμη από τον τρέχοντα κλάδο, θα εμφανίσει μόνο τη δέσμευση που είναι προσβάσιμη από τον τρέχοντα κλάδο.

αρχείο καταγραφής git

Παραγωγή:

Output

αρχείο καταγραφής git

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

git checkout HEAD~1

Παραγωγή:

Output

Το HEAD~1 είναι η δέσμευση που αποσπάται από τον τρέχοντα κλάδο.

4. Τρέξιμο git prune

Μετά την ολοκλήρωση της αγοράς της αποσπασμένης δέσμευσης, πρέπει να επιστρέψουμε στον κύριο μέσω της εντολής git checkout και στη συνέχεια να εκτελέσουμε την εντολή git prune. Πρέπει να περάσουμε ορισμένες επιλογές στην εντολή git prune έτσι ώστε η έξοδος της εντολής να εμφανίζει αυτό που έχει οριστεί να κλαδευτεί.

git prune –dry-run –verbose

Παραγωγή:

Output

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

Παραγωγή:

Output

Κλάδεψε την απρόσιτη δέσμευση

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

Leave a Reply

Your email address will not be published. Required fields are marked *