-
1. Ξεκινώντας με το Git
-
2. Τα θεμελιώδη στοιχεία του Git
-
3. Διακλαδώσεις στο Git
-
4. Το Git στον διακομιστή
- 4.1 Τα πρωτόκολλα
- 4.2 Εγκατάσταση του Git σε διακομιστή
- 4.3 Δημιουργία δημόσιου κλειδιού SSH
- 4.4 Στήσιμο του διακομιστή
- 4.5 Δαίμονες του Git
- 4.6 Έξυπνο HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Επιλογές φιλοξενίας από τρίτους
- 4.10 Ανακεφαλαίωση
-
5. Κατανεμημένο Git
-
6. GitHub
-
7. Εργαλεία του Git
- 7.1 Επιλογή αναθεώρησης
- 7.2 Διαδραστική εργασία με το στάδιο καταχώρισης
- 7.3 stash και clean
- 7.4 Υπογραφή της δουλειάς μας
- 7.5 Αναζήτηση
- 7.6 Η ιστορία ξαναγράφεται
- 7.7 Απομυθοποίηση της reset
- 7.8 Συγχωνεύσεις για προχωρημένους
- 7.9 Rerere
- 7.10 Αποσφαλμάτωση με το Git
- 7.11 Λειτουργικές υπομονάδες
- 7.12 Δεμάτιασμα δεδομένων
- 7.13 Replace
- 7.14 Αποθήκευση διαπιστευτηρίων
- 7.15 Ανακεφαλαίωση
-
8. Εξατομίκευση του Git
-
9. Το Git και άλλα συστήματα
- 9.1 Το Git ως πελάτης
- 9.2 Μετανάστευση στο Git
- 9.3 Ανακεφαλαίωση
-
10. Εσωτερική λειτουργία του Git
- 10.1 Διοχετεύσεις και πορσελάνες
- 10.2 Αντικείμενα του Git
- 10.3 Αναφορές του Git
- 10.4 Πακετάρισμα αρχείων
- 10.5 Τα refspec
- 10.6 Πρωτόκολλα μεταφοράς
- 10.7 Διατήρηση και ανάκτηση δεδομένων
- 10.8 Μεταβλητές περιβάλλοντος
- 10.9 Ανακεφαλαίωση
-
A1. Appendix A: Το Git σε άλλα περιβάλλοντα
- A1.1 Γραφικές διεπαφές
- A1.2 Το Git στο Visual Studio
- A1.3 Git στο Eclipse
- A1.4 Το Git στο Bash
- A1.5 Το Git στο Zsh
- A1.6 Το Git στο Powershell
- A1.7 Ανακεφαλαίωση
-
A2. Appendix B: Ενσωμάτωση του Git στις εφαρμογές μας
- A2.1 Γραμμή εντολών Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Εντολές Git
- A3.1 Ρύθμιση και διαμόρφωση
- A3.2 Λήψη και δημιουργία έργων
- A3.3 Βασική λήψη στιγμιοτύπων
- A3.4 Διακλάδωση και συγχώνευση
- A3.5 Κοινή χρήση και ενημέρωση έργων
- A3.6 Επιθεώρηση και σύγκριση
- A3.7 Αποσφαλμάτωση
- A3.8 Επιθέματα
- A3.9 Ηλεκτρονικό ταχυδρομείο
- A3.10 Εξωτερικά Συστήματα
- A3.11 Διοίκηση
- A3.12 Εντολές διοχέτευσης
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
στην ενότητα Συμμάζεμα του καταλόγου εργασίας.