Chapters ▾ 2nd Edition

2.1 Τα θεμελιώδη στοιχεία του Git - Απόκτηση αποθετηρίου Git

Αν μπορούσατε να διαβάσετε μόνο ένα κεφάλαιο για το Git, τότε θα έπρεπε να διαβάσετε αυτό. Το κεφάλαιο αυτό καλύπτει κάθε βασική εντολή που χρειάζεστε για να επιτελέσετε τη συντριπτική πλειονότητα των ενεργειών που μπορείτε να κάνετε με το Git. Στο τέλος αυτού το κεφαλαίου, θα μπορείτε να παραμετροποιείτε (configure) και να αρχικοποιείτε ένα αποθετήριο, να αρχίζετε και να σταματάτε την παρακολούθηση (tracking) αρχείων, να τοποθετείτε αλλαγές στον προθάλαμο (stage) ή να τις υποβάλλετε (commit). Επίσης θα σας δείξουμε πώς να ρυθμίσετε το Git ώστε να αγνοεί ορισμένα αρχεία και μοτίβα αρχείων, πώς να αναιρείτε λάθη εύκολα και γρήγορα, πώς να περιηγείστε στο ιστορικό του έργου σας ώστε να βλέπετε τις αλλαγές μεταξύ των υποβολών και πώς να ωθείτε (push) σε και να τραβάτε (pull) από απομακρυσμένα αποθετήρια.

Απόκτηση αποθετηρίου Git

Μπορούμε να δημιουργήσουμε ένα έργο στο Git χρησιμοποιώντας δύο βασικές προσεγγίσεις.

  1. Να πάρουμε ένα έργο που έχουμε σε κάποιο υπάρχοντα κατάλογο που δεν βρίσκεται υπό έλεγχο εκδόσεων και να τον μετατρέψουμε σε ένα αποθετήριο Git

  2. Να κλωνοποιήσουμε (clone) ένα υπάρχον αποθετήριο Git από κάπου αλλού.

Σε κάθε περίπτωση, θα αποκτήσουμε ένα αποθετήριο Git τοπικά στον υπολογιστή μας.

Αρχικοποίηση αποθετηρίου σε έναν υπάρχοντα κατάλογο

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

Σε Linux

$ cd /home/user/my_project

Σε macOS:

$ cd /Users/user/my_project

Σε Windows:

$ cd C:/Users/user/my_project

και πληκτρολογούμε:

$ git init

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

Αν θέλουμε να ξεκινήσουμε τον έλεγχο έκδοσης στα υπάρχοντα αρχεία (εν εντιθέσει με ένα κενό κατάλογο), θα πρέπει να ξεκινήσουμε την παρακολούθηση αυτών των αρχείων και να κάνουμε την πρώτη υποβολή (commit). Για να το πετύχουμε αυτό θα χρειαστούμε μερικές εντολές 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 όλες οι εκδόσεις κάθε αρχείου του έργου αποθηκεύονται τοπικά. Μάλιστα, αν ο δίσκος του διακομιστή μας αλλοιωθεί, μπορούμε να χρησιμοποιήσουμε οποιονδήποτε από τους κλώνους του ώστε να θέσουμε τον διακομιστή στην κατάσταση που ήταν όταν κλωνοποιήθηκε (μπορεί να χαθεί κάποιο άγκιστρο (hook) από την μεριά του διακομιστή, αλλά τα δεδομένα με έκδοση θα είναι εκεί — βλ. Εγκατάσταση του Git σε διακομιστή για περισσότερες πληροφορίες).

Για να κλωνοποιήσουμε ένα αποθετήριο, εκτελούμε την εντολή 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 σε διακομιστή παρουσιάζει όλες τις διαθέσιμες εναλλακτικές που με τις οποίες μπορεί ένας διακομιστής να μας δώσει πρόσβαση σε ένα αποθετήριο Git, καθώς και τα πλεονεκτήματα και μειονεκτήματα της κάθε εναλλακτικής.