-
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 Αποθέματα και Καθαρισμός
- 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 στο Visual Studio Code
- A1.4 Git στο IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git στο Sublime Text
- A1.6 Το Git στο Bash
- A1.7 Το Git στο Zsh
- A1.8 Το Git στο Powershell
- A1.9 Ανακεφαλαίωση
-
A2. Appendix B: Ενσωμάτωση του Git στις εφαρμογές μας
- A2.1 Γραμμή εντολών Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
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.4 Appendix C: Εντολές Git - Διακλάδωση και συγχώνευση
Διακλάδωση και συγχώνευση
Υπάρχουν μόνο μερικές εντολές που υλοποιούν το μεγαλύτερο μέρος της λειτουργικότητας διακλάδωσης και συγχώνευσης στο Git.
git branch
Η εντολή 'git branch' είναι στην πραγματικότητα ένα εργαλείο διαχείρισης κλάδων. Μπορεί να απαριθμήσει τους κλάδους που έχουμε, να δημιουργήσει έναν νέο κλάδο, να διαγράψει κλάδους και να μετονομάσει κλάδους.
Το μεγαλύτερο μέρος του κεφαλαίου Διακλαδώσεις στο Git είναι αφιερωμένο στην εντολή branch και χρησιμοποιείται σε όλο το κεφάλαιο.
Αρχικά παρουσιάζεται στην ενότητα Δημιουργία νέου κλάδου και τα περισσότερα από τα χαρακτηριστικά της (εισαγωγή και διαγραφή) αναλύονται στην ενότητα Διαχείριση κλάδων.
Στην ενότητα Παρακολούθηση κλάδων χρησιμοποιούμε την επιλογή git branch -u για να δημιουργήσουμε έναν παρακολουθούμενο κλάδο.
Τέλος, στην ενότητα Αναφορές του Git βλέπουμε μερικά από τα πράγματα που κάνει στο παρασκήνιο.
git checkout
Η εντολή 'git checkout' χρησιμοποιείται για να μεταβούμε από έναν κλάδο σε άλλο και να ενημερώοσουμε το περιεχόμενο στον κατάλογο εργασίας μας.
Αρχικά συναντάμε την εντολή στην ενότητα Μετάβαση σε άλλο κλάδο μαζί με την εντολή git branch.
Βλέπουμε πώς να το χρησιμοποιήσουμε για να αρχίσουμε να παρακολουθούμε κλάδους με τη σημαία --track στην ενότητα Παρακολούθηση κλάδων.
Τη χρησιμοποιούμε για την επανεισαγωγή των συγκρούσεων αρχείων με την --conflict=diff3 στην ενότητα Checking Out Conflicts.
Βλέπουμε λεπτομερώς τη σχέση της με την git reset στην ενότητα Απομυθοποίηση της reset.
Τέλος, βλέπουμε κάποιες λεπτομέρειες υλοποίησής της στην ενότητα Ο HEAD.
git merge
Το εργαλείο git merge χρησιμοποιείται για τη συγχώνευση ενός ή περισσοτέρων κλάδων στον κλάδο στον οποίο έχουμε κάνει checkout.
Στη συνέχεια ωθεί τον τρέχοντα κλάδο στο αποτέλεσμα της συγχώνευσης.
Η εντολή git merge εισάγεται για πρώτη φορά στην ενότητα Διακλαδώσεις — τα βασικά.
Παρότι χρησιμοποιείται σε διάφορα σημεία του βιβλίου, υπάρχουν πολύ λίγες παραλλαγές της εντολής merge — βασικά η git merge <branch> με το όνομα του μόνου κλάδου που θέλουμε να συγχωνεύσουμε.
Καλύψαμε πώς κάνουμε μία συναρμοσμένη (squashed) συγχώνευση (στην οποία το Git συγχωνεύει το έργο, αλλά προσποιείται ότι πρόκειται για μια νέα υποβολή χωρίς να καταγράφει το ιστορικό του κλάδου που συγχωνεύουμε) στο τέλος της ενότητας Αποσχισμένα δημόσια έργα.
Πολλές πληροφορίες για τη διαδικασία και εντολή συγχώνευσης συμπερλιλαμβανομένης της εντολής -Xignore-space-change και της σημαίας --abort, όσον αφορά στη ματαίωση μίας προβληματικής συγχώνευσης, υπάρχουν στην ενότητα Προχωρημένη Συγχώνευση.
Μάθαμε πώς να επαληθεύουμε τις υπογραφές πριν τη συγχώνευση αν το έργο μας χρησιμοποιεί την υπογραφή GPG στην ενότητα Υπογραφή υποβολών.
Τέλος, μάθαμε για τη συγχώνευση υποδέντρων στην ενότητα Συγχώνευση υποδένδρων.
git mergetool
Η εντολή git mergetool απλά εκκινεί έναν εξωτερικό βοηθό συγχώνευσης σε περίπτωση που έχουμε προβλήματα με κάποια συγχώνευση στο Git.
Την αναφέρουμε στα γρήγορα στην ενότητα Συγκρούσεις συγχωνεύσεων — τα βασικά και βλέπουμε λεπτομερώς πώς να υλοποιήσουμε το δικό μας εξωτερικό εργαλείο συγχώνευσης στην ενότητα Εξωτερικά εργαλεία συγχώνευσης και diff.
git log
Η εντολή git log χρησιμοποιείται για να δείξει το προσπελάσιμο εγγεγραμμένο ιστορικό ενός έργου από το πιο πρόσφατο στιγμιότυπο υποβολής και πίσω.
Εκ προεπιλογής εμφανίζεται μόνο το ιστορικό του κλάδου στον οποίο βρισκόμαστε, αλλά είναι δυνατό να δοθούν διαφορετικές ή ακόμα και πολλαπλές κεφαλές ή κλάδοι που μπορούμε να διασχίσουμε.
Συχνά χρησιμοποιείται επίσης για την εμφάνιση διαφορών μεταξύ δύο ή περισσοτέρων κλάδων σε επίπεδο υποβολής.
Αυτή η εντολή χρησιμοποιείται σχεδόν σε κάθε κεφάλαιο του βιβλίου για να επιδείξει την ιστορία ενός έργου.
Εισάγουμε την εντολή και την καλύπτουμε σε κάποιο βάθος στην ενότητα Χρησιμοποιώντας το ιστορικό υποβολών.
Εξετάζουμε τις επιλογές -p και -stat για να πάρουμε μια ιδέα για το τι εισήχθη σε κάθε υποβολή και τις επιλογές --pretty και --oneline για να δούμε την ιστορία πιο συνοπτικά, μαζί με μερικές απλές ημερομηνίες και επιλογές φιλτραρίσματος συγγραφέων.
Στην ενότητα Δημιουργία νέου κλάδου τη χρησιμοποιούμε με την επιλογή --decorate για να απεικονίσουμε εύκολα τη θέση των δεικτών του κλάδου μας· επίσης χρησιμοποιούμε την επιλογή --graph για να δούμε με τι μοιάζουν αποκλίνουσες ιστορίες.
Στις ενότητες Ιδιωτικές μικρές ομάδες και Εύρος υποβολών καλύπτουμε τη σύνταξη branchA..branchB της εντολής git log για να δούμε ποιες υποβολές είναι μοναδικές σε έναν κλάδο σε σχέση με έναν άλλο κλάδο.
Στην ενότητα Εύρος υποβολών βλέπουμε ακριβώς αυτό σε αρκετά μεγάλη έκταση.
Στις ενότητες Συγχώνευση μητρώου και Τριπλή τελεία καλύπτουμε τη χρήση της μορφής branchA…branchB και τη σύνταξη --left-right για να δούμε τι υπάρχει σε έναν κλάδο ή τον άλλο αλλά όχι και στους δύο.
Στην ενότητα Συγχώνευση μητρώου εξετάζουμε επίσης πώς χρησιμοποιούμε την επιλογή --merge για να βοηθήσουμε στην αποσφαλμάτωση συγκρούσεων συγχώνευσης καθώς και την επιλογή --cc για να εξετάσουμε τις συγκρούσεις συγχώνευσης υποβολών στο ιστορικό μας.
Στην ενότητα RefLog Shortnames χρησιμοποιούμε την επιλογή -g για να δούμε το reflog του Git μέσα από αυτό το εργαλείο αντί να κάνουμε διέλευση κλάδων.
Στην ενότητα Αναζήτηση εξετάζουμε τις επιλογές -S και -L για να κάνουμε αρκετά εξεζητημένες αναζητήσεις για κάτι που συνέβη στο παρελθόν στον κώδικα, όπως για παράδειγμα το ιστορικό μιας συνάρτησης.
Στην ενότητα Υπογραφή υποβολών βλέπουμε πώς χρησιμοποιούμε την --show-signature για να προσθέσουμε μια συμβολοσειρά επικύρωσης σε κάθε υποβολή στην έξοδο της git log ανάλογα με το αν είναι έγκυρα υπογεγραμμένη ή όχι.
git stash
Η εντολή git stash χρησιμοποιείται για την προσωρινή αποθήκευση εργασιών που δεν έχουν υποβληθεί, προκειμένου να καθαριστεί ο κατάλογος εργασίας μας χωρίς να χρειάζεται να εκτελέσουμε εργασίες που δεν έχουν ολοκληρωθεί σε κάποιον κλάδο.
Καλύπτεται εξ ολοκλήρου στην ενότητα Αποθέματα και Καθαρισμός.
git tag
Η εντολή git tag χρησιμοποιείται για να προσαρτήσει έναν μόνιμο σελιδοδείκτη σε ένα συγκεκριμένο σημείο στο ιστορικό του κώδικα.
Γενικά αυτό χρησιμοποιείται για πράγματα όπως εκδόσεις κυκλοφορίας λογισμικού (release).
Αυτή η εντολή εισάγεται και καλύπτεται λεπτομερώς στην ενότητα Ετικέτες και τη χρησιμοποιούμε στην πράξη στην ενότητα Δημιουργία ετικετών για τις δημοσιευμένες εκδόσεις.
Καλύπτουμε επίσης τον τρόπο δημιουργίας μιας ετικέτας που έχει υπογραφεί με GPG με τη σημαία -s και την επαλήθευση ετικετών με τη σημαία -v στην ενότητα Υπογραφή της δουλειάς μας.