-
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 Εντολές διοχέτευσης
2.1 Τα θεμελιώδη στοιχεία του Git - Αποκτώντας ένα αποθετήριο Git
Αν μπορούσαμε να διαβάσουμε μόνο ένα κεφάλαιο για το Git, τότε θα έπρεπε να διαβάσουμε αυτό. Το κεφάλαιο αυτό καλύπτει κάθε βασική εντολή που χρειαζόμαστε για να κάνουμε τη συντριπτική πλειονότητα των ενεργειών που μπορούμε να κάνουμε με το Git. Στο τέλος αυτού το κεφαλαίου, θα μπορούμε να διαμορφώνουμε και να αρχικοποιούμε ένα αποθετήριο, να ξεκινήσουμε και να σταματήσουμε την παρακολούθηση αλλαγών σε αρχεία, να καταχωρούμε καθώς και να υποβάλλουμε αλλαγές. Θα δούμε επίσης πώς να ρυθμίσουμε το Git ώστε να αγνοεί ορισμένα αρχεία και μοτίβα αρχείων, πώς να αναιρέσουμε λάθη εύκολα και γρήγορα, πώς να περιηγηθούμε στο ιστορικό του έργου μας ώστε να δούμε τις αλλαγές μεταξύ των υποβολών και πώς να ωθήσουμε σε και να έλξουμε από απομακρυσμένα αποθετήρια.
Αποκτώντας ένα αποθετήριο Git
Μπορούμε να δημιουργήσουμε ένα έργο στο Git χρησιμοποιώντας δύο βασικές προσεγγίσεις. Η πρώτη παίρνει ένα υπάρχον έργο ή κατάλογο και το εισάγει στο Git. Η δεύτερη κλωνοποιεί ένα υπάρχον αποθετήριο Git από έναν άλλο διακομιστή.
Αρχικοποιώντας ένα αποθετήριο σε έναν υπάρχοντα Κατάλογο
Αν θέλουμε να ξεκινήσουμε την παρακολούθηση ενός υπάρχοντος έργου στο Git, θα χρειαστεί να πάμε στον κατάλογο του έργου μας και να πληκτρολογήσουμε
$ git init
Η εντολή αυτή δημιουργεί έναν νέο υπο-κατάλογο με το όνομα .git
ο οποίος περιέχει όλα τα απαραίτητα αρχεία για το αποθετήριο. Ουσιαστικό ο υπο-κατάλογος αυτός αποτελεί ένα σκελετό για το αποθετήριό μας.
Στο σημείο αυτό, τίποτα δεν παρακολουθείται ακόμα από το έργο μας.
(Βλ. [ch10-git-internals] για περισσότερες πληροφορίες σχετικά με το τι ακριβώς αρχεία περιέχονται στον κατάλογο .git
που μόλις δημιουργήσαμε.)
Αν θέλουμε να ξεκινήσουμε τον έλεγχο έκδοσης στα υπάρχοντα αρχεία, θα πρέπει να ξεκινήσουμε την παρακολούθηση αυτών των αρχείων και να κάνουμε μια πρώτη υποβολή τους.
Για να το επιτύχουμε αυτό θα χρειαστούμε μερικές εντολές git add
οι οποίες προσδιορίζουν τα αρχεία που θέλουμε να παρακολουθούμε και μια εντολή git commit
:
$ git add *.c
$ git add LICENSE
$ git commit -m 'initial project version'
θα εξετάσουμε σε λίγο τι κάνουν οι παραπάνω εντολές. Στο σημείο αυτό, έχουμε ένα αποθετήριο Git με κάποια παρακολουθούμενα αρχεία και μια αρχική υποβολή.
Κλωνοποιώντας ένα υπάρχον αποθετήριο
Αν θέλουμε να αποκτήσουμε ένα αντίγραφο ενός υπάρχοντος αποθετηρίου Git —για παράδειγμα, ένα έργο στο οποίο θα θέλαμε να συνεισφέρουμε— η εντολή που χρειαζόμαστε είναι git clone
.
Αν είμαστε εξεικοιωμένοι με άλλα συστήματα ελέγχου έκδοσης όπως το Subversion, θα παρατηρήσουμε ότι η εντολή είναι "clone" και όχι "checkout".
Αυτή είναι μια σημαντική διάκριση· το Git παίρνει ένα πλήρες αντίγραφο σχεδόν όλων των δεδομένων που έχει ο διακομιστής αντί για ένα απλό αντίγραφο.
Με την εντολή git clone
όλες οι εκδόσεις του κάθε αρχείου του έργου αποθηκεύονται τοπικά.
Στην πραγματικότητα, αν ο δίσκος του διακομιστή μας αλλοιωθεί, μπορούμε να χρησιμοποιήσουμε οποιονδήποτε από τους κλώνους του ώστε να θέσουμε τον διακομιστή στην κατάσταση που ήταν όταν κλωνοποιήθηκε.
Για να κλωνοποιήσουμε ένα αποθετήριο, εκτελούμε την εντολή git clone [url]
.
Για παράδειγμα, αν θέλουμε να κλωνοποιήσουμε τη βιβλιοθήκη libgit2 του Git, θα πρέπει να εκτελέσουμε:
$ git clone https://github.com/libgit2/libgit2
Η εντολή αυτή δημιουργεί έναν κατάλογο με το όνομα libgit2
, αρχικοποιεί έναν κατάλογο .git
μέσα σε αυτόν, κατεβάζει όλα τα δεδομένα για αυτό το αποθετήριο καθώς και ένα αντίγραφο από την τελευταία έκδοση.
Αν περιηγηθούμε στον καινούριο κατάλογο libgit2
, θα δούμε τα αρχεία του έργου μέσα σε αυτόν, έτοιμα για να χρησιμοποιηθούν.
Αν θέλουμε να κλωνοποιήσουμε το αποθετήριο σε έναν κατάλογο με διαφορετικό όνομα, μπορούμε να το ορίσουμε με την παρακάτω εναλλακτική της εντολής:
$ git clone https://github.com/libgit2/libgit2 mylibgit
Η εντολή αυτή έχει το ίδιο αποτέλεσμα με την προηγούμενη, αλλά ο κατάλογος που θα δημιουργηθεί ονομάζεται mylibgit
.
Το Git έχει διάφορα πρωτόκολλα μεταφοράς που μπορούμε να χρησιμοποιήσουμε.
Το προηγούμενο παράδειγμα χρησιμοποεί το πρωτόκολλο https://
, ενδέχεται επίσης να δούμε το git://
ή το user@server:path/to/repo.git
το οποίο χρησιμοποιεί το πρωτόκολλο μεταφοράς SSH.
Στο κεφάλαιο Εγκατάσταση του Git σε διακομιστή θα μας παρουσιαστούν όλες οι διαθέσιμες εναλλακτικές που μπορεί να χρησιμοποιήσει ο διακομιστής ώστε να αποκτήσει πρόσβαση στο αποθετήριό μας, καθώς και τα πλεονεκτήματα και μειονεκτήματα της κάθε εναλλακτικής.