Git
Chapters ▾ 2nd Edition

A3.3 Appendix C: Εντολές Git - Βασική λήψη στιγμιοτύπων

Βασική λήψη στιγμιοτύπων

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

git add

Η εντολή git add προσθέτει περιεχόμενο από τον κατάλογο εργασίας στο ενδιάμεσο στάδιο (ή “ευρετήριο”) για την επόμενη υποβολή. Όταν εκτελείται η εντολή git commit, εκ προεπιλογής εξετάζει μόνον το ενδιάμεσο στάδιο, συνεπώς η git add χρησιμοποιείται για να δημιουργήσουμε ακριβώς όπως θέλουμε το επόμενο υποβληθέν στιγμιότυπό μας.

Αυτή η εντολή είναι μια εξαιρετικά σημαντική εντολή στο Git και αναφέρεται ή χρησιμοποιείται δεκάδες φορές σε αυτό το βιβλίο. Θα καλύψουμε γρήγορα ορισμένες από τις μοναδικές χρήσεις που αναφέρονται.

Αρχικά εισάγουμε και εξηγούμε λεπτομερώς την git add στην ενότητα Παρακολούθηση νέων αρχείων.

Αναφέρουμε πώς να τη χρησιμοποιήσουμε για την επίλυση συγκρούσεων συγχώνευσης στην ενότητα Βασικές συγκρούσεις συγχωνεύσεων.

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

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

git status

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

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

git diff

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

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

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

Βλέπουμε πώς να ελέγξουμε πιο αποτελεσματικά τις διαφορές μεταξύ κλάδων με τη σύνταξη git diff A...B στην ενότητα Προσδιορισμός του τι έχει εισαχθεί.

Τη χρησιμοποιούμε για να φιλτράρουμε τις διαφορές λευκών διαστημάτων με την επιλογή -b και πώς να συγκρίνουμε τα διαφορετικά στάδια των συγκρουόμενων αρχείων με τις --theirs, --ours και --base στην ενότητα Συγχωνεύσεις για προχωρημένους.

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

git difftool

Η εντολή git difftool απλά εκκινεί ένα εξωτερικό εργαλείο για να μας δείξει τη διαφορά (diff) ανάμεσα σε δύο δέντρα στην περίπτωση που θέλουμε να χρησιμοποιήσουμε κάποια άλλη εφαρμογή από την ενσωματωμένη εντολή git diff.

Την αναφέρουμε μόνο εν συντομία αυτό στην ενότητα Προβολή των καταχωρημένων και μη-καταχωρημένων αλλαγών.

git commit

Η εντολή git commit λαμβάνει όλα τα περιεχόμενα του αρχείου που έχουν προστεθεί στο ενδιάμεσο στάδιο με την git add, καταγράφει ένα νέο μόνιμο στιγμιότυπο στη βάση δεδομένων και μετά μετακινεί τον δείκτη κλάδου στον τρέχοντα κλάδο σε αυτό.

Τα βασικά της υποβολής καλύπτονται στην ενότητα Υποβολή των αλλαγών. Εκεί παρουσιάζεται επίσης πώς χρησιμοποιούμε τη σημαία -a για να παραλείψουμε το βήμα git add στις καθημερινές ροές εργασίας και πώς να χρησιμοποιήσουμε τη σημαία -m για να περάσουμε ένα μήνυμα υποβολής στη γραμμή εντολών αντί για την εκκίνηση ενός επεξεργαστή κειμένου.

Στην ενότητα Αναιρώντας κάτι καλύπτεται η τροποποίηση της πιο πρόσφατης υποβολής με την την επιλογή - amend για να επαναλάβουμε την πιο πρόσφατη υποβολή.

Στην ενότητα Οι κλάδοι με λίγα λόγια, βλέπουμε με περισσότερες λεπτομέρειες τι κάνει git commit και γιατί το κάνει με αυτόν τον τρόπο.

Εξετάζουμε πώς υπογράφουμε κρυπτογραφικά υποβολές με τη σημαία -S στην ενότητα Υπογραφή υποβολών.

Τέλος, ρίχνουμε μια ματιά στο τι κάνει η εντολή git commit στο παρασκήνιο και πώς εφαρμόζεται πραγματικά στην ενότητα Αντικείμενα υποβολής.

git reset

Η εντολή git reset χρησιμοποιείται κυρίως για να ακυρώσει κάτι, όπως μπορούμε να δούμε και από την ίδια τη λέξη. Μετακινεί τον δείκτη HEAD από δω κι από κει και προαιρετικά αλλάζει τον index ή το ενδιάμεσο στάδιο και μπορεί επίσης προαιρετικά να αλλάξει τον κατάλογο εργασίας μας αν χρησιμοποιήσουμε την επιλογή --hard. Η τελευταία επιλογή καθιστά δυνατή την απώλεια της δουλειάς μας με αυτήν την εντολή, εφόσον χρησιμοποιηθεί εσφαλμένα, οπότε καλά θα είναι να την καταλάβουμε σε βάθος πριν τη χρησιμοποιήσουμε.

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

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

Χρησιμοποιούμε την git reset --hard για να ματαιώσουμε μια συγχώνευση στην ενότητα Απόρριψη συγχώνευσης, όπου χρησιμοποιούμε επίσης την git merge --abort, η οποία είναι λιγάκι σαν ένα περιτύλιγμα της εντολής git reset.

git rm

Η εντολή git rm χρησιμοποιείται για την αφαίρεση αρχείων από το ενδιάμεσο στάδιο και τον κατάλογο εργασίας. Είναι παρόμοια με το git add στο ότι προετοιμάζει την κατάργηση ενός αρχείου για την επόμενη υποβολή.

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

Η μόνη άλλη διαφορετική χρήση του git rm στο βιβλίο είναι στην ενότητα Διαγραφή αντικειμένων όπου εν συντομία χρησιμοποιείται και εξηγείται η --ignore-unmatch κατά την εκτέλεση της git filter-branch, η οποία ουσιαστικά δεν τερματίζει με σφάλμα όταν το το αρχείο που προσπαθούμε να καταργήσουμε δεν υπάρχει. Αυτό μπορεί να είναι χρήσιμο όταν η εντολή χρησιμοποιείται σε script.

git mv

Η εντολή git mv είναι μια εντολή ευκολίας για να μετακινήσουμε ένα αρχείο και στη συνέχεια εκτελέσουμε την git add στο νέο αρχείο και git rm στο παλιό αρχείο.

Την αναφέρουμε μόνο εν συντομία στην ενότητα Μετακινώντας αρχεία.

git clean

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

Καλύπτουμε πολλές από τις επιλογές και τα σενάρια στα οποία μπορούμε να χρησιμοποιήσουμε την εντολή clean στην ενότητα Συμμάζεμα του καταλόγου εργασίας.