Εισαγωγή στο git

Το Git είναι ένα Σύστημα Ελέγχου Έκδοσης (VCS-Version Control System) που είναι πιθανώς γνωστό από όλους τους προγραμματιστές. Κάνει τη διαχείριση των έργων, των αρχείων και των αλλαγών που γίνονται σε αυτά πολύ πιο εύκολη. Όμως, καθώς είναι ένα μεγάλο και περίπλοκο σύστημα, οι νέοι στον προγραμματισμό μπορεί να δυσκολεύονται να το μάθουν. Σε αυτό το άρθρο, θα εξετάσουμε τις βασικές έννοιες και τις λειτουργίες του Git από την αρχή! Θα διερευνήσουμε όλα όσα πρέπει να γνωρίζετε για να αξιοποιήσετε καλύτερα το Git σε καθημερινή βάση.

Version Control System

Ας ξεκινήσουμε κατανοώντας την πιο βασική ιδέα πίσω από το Git, κάτι που συχνά θεωρείται δεδομένο - το Version Control System (VCS). Τι είναι και γιατί το Git είναι στην πραγματικότητα μία από τις πολλαπλές υλοποιήσεις του. Για να το εξηγήσουμε με ένα παράδειγμα - ας πούμε ότι δημιουργείτε ένα έργο με μόνο ένα αρχείο. Σε ένα τέτοιο σενάριο, ο έλεγχος έκδοσης σάς βοηθά να τεκμηριώνετε και να αποθηκεύετε τις αλλαγές που κάνατε στο αρχείο σας καθ ‘όλη τη διάρκεια του χρόνου. Κάθε φορά που αλλάζετε κάτι στο αρχείο σας και το αποθηκεύετε, πραγματοποιείτε μια αλλαγή. Το VCS σάς δίνει επίσης τη δυνατότητα να προσθέτετε σχόλια στις αλλαγές σας, να διατηρείτε τα πράγματα οργανωμένα και αργότερα να γνωρίζετε σε ποια κατάσταση θέλετε να επιστρέψετε στο αρχείο σας προτού συμβεί μια αλλαγή.

Αλλά, ας πούμε ότι θέλετε να εργαστείτε στο έργο σας μαζί με τον φίλο σας. Καθώς έχετε μόνο ένα αρχείο για να το επεξεργαστείτε και να το κάνετε σε διαφορετικούς χρόνους, η διαχείριση μιας τέτοιας ανάπτυξης μπορεί να είναι λίγο προβληματική. Μην ανησυχείτε - το VCS μπορεί να βοηθήσει. Βοηθά στην παρακολούθηση των αλλαγών που πραγματοποιούνται σε ένα συγκεκριμένο αρχείο με την πάροδο του χρόνου από συγκεκριμένους χρήστες, ώστε να μπορείτε αργότερα να αποφασίσετε πώς να τα συνδυάσετε με μια διαδικασία που ονομάζεται συγχώνευση (merging). Και με αυτόν τον τρόπο, το VCS αποθηκεύει δεδομένα σχετικά με συγκεκριμένες αλλαγές, τον χρόνο και το τι έκανε ο χρήστης.

GIT

Τώρα, ας επιστρέψουμε στο ίδιο το Git. Όπως ανέφερα, είναι ένα από τα πιο δημοφιλή και ευρέως χρησιμοποιούμενα VCS. Η δημοτικότητά του είναι σίγουρα αποτέλεσμα μερικών από τα πιο σημαντικά πλεονεκτήματά του. Πρώτα απ ‘όλα, είναι Distributed (κατανεμημένο), πράγμα που σημαίνει ότι δεν χρειάζεστε ενεργή σύνδεση στο Διαδίκτυο και απλώς εκτελείτε το Git στον τοπικό υπολογιστή σας. Και αυτό οφείλεται στην αρχιτεκτονική και την απόδοσή του.

Ας ξεκινήσουμε

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

git init projectName cd projectName

Η παραπάνω εντολή θα ξεκινήσει το Git στον κατάλογο που καθορίζεται από το projectName (θα δημιουργηθεί εάν δεν υπάρχει ήδη) Εάν δεν ορίσετε κανένα όνομα, το Git repo θα δημιουργηθεί στον τρέχοντα κατάλογο.

Είναι γεγονός ότι τα έργα Git αποθηκεύονται συχνά σε πλατφόρμες όπως το GitHub με GUI web client ή κάτι σαν το GitKraken. Εμείς, για να διατηρήσουμε τα πράγματα απλά, χρησιμοποιούμε μόνο εντολές. Αυτό συμβαίνει επειδή νομίζω ότι είναι ο ευκολότερος τρόπος να κατανοήσουμε τις βασικές έννοιες. Το ίδιο μπορεί να εφαρμοστεί αργότερα σε εργαλεία GUI που κάνουν τα πράγματα πιο απλά.

Διαπιστευτήρια

Το Git αποθηκεύει τις πληροφορίες σχετικά με τον χρήστη που έκανε κάποια συγκεκριμένη αλλαγή. Όμως, για αυτό, πρέπει να έχει κάποιες επιπλέον πληροφορίες σχετικά με τον συνεισφέροντα. Γι ‘αυτό, προτού αρχίσουμε να δουλεύουμε με οποιαδήποτε αρχεία, πρέπει πρώτα να ρυθμίσουμε τα διαπιστευτήριά μας - στις περισσότερες περιπτώσεις, το όνομα και το email είναι αρκετά.

git config --global user.name "User" git config --global user.email "user@user.com"

Με τις παραπάνω εντολές, ορίζουμε το όνομα και τη διεύθυνση email μας και τα οποία θα χρησιμοποιηθούν για οποιαδήποτε δέσμευση (commit) κάνουμε από το μηχάνημά μας. Το user.name ορίζει το όνομα του χρήστη και το user.email - το δημόσιο email του. Η εντολή git config χρησιμοποιείται συχνά για τον ορισμό διαφορετικών μεταβλητών που χρησιμοποιούνται από το Git εσωτερικά, αλλά εδώ (και στις περισσότερες περιπτώσεις) το όνομα και το email είναι τα μόνα που χρειάζονται για να προχωρήσουμε.

Δουλεύοντας με αρχεία

Ας υποθέσουμε ότι δημιουργήσατε ένα νέο αρχείο με κάποιο περιεχόμενο που θέλετε να δεσμεύσετε (commit) στο αποθετήριο Git. Δείτε πώς μπορείτε να το κάνετε αυτό:

git add .

Με την παραπάνω εντολή προσθέτουμε όλα τα αρχεία μας σε κάποιο υποτηθέμενο κοντέινερ, δηλαδή κάνουμε σταδιακά τις αλλαγές μας, και να ενημερώσουμε το Git ότι έχουν αλλάξει - δημιουργηθεί, ενημερωθεί ή καταργηθεί. Αυτό το βήμα διαχειρίζεται συχνά αυτόματα από σύγχρονους επεξεργαστές κώδικα όπως ο VS Code με ενσωματωμένη υποστήριξη Git. Πρέπει να γνωρίζετε ότι οι αλλαγές μας δεν έχουν πραγματοποιηθεί ακόμη. Προς το παρόν, το Git γνωρίζει μόνο ότι έχουν φτιαχτεί. Για να τις δεσμεύσουμε, δηλαδή να τις αποθηκεύσουμε στο ιστορικό του Git repo, θα πρέπει να χρησιμοποιήσουμε μια άλλη εντολή:

git commit -m "Commit message"`

Στην εντολή git commit δεν χρειάζεται να βάλουμε arguments, καθώς είναι ήδη γνωστά λόγω της προηγούμενης εντολής add. Αντ ‘αυτού, εδώ μπορούμε να δώσουμε μερικές επιπλέον πληροφορίες σχετικά με την τρέχουσα δέσμευσή μας. Σε αυτό το παράδειγμα, χρησιμοποιώ μία από τις πολλές χρήσιμες επιλογές την -m (μήνυμα) για να προσθέσω κάποια τεκμηρίωση στην τρέχουσα δέσμευσή μου.

Συνεργασία

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

Branches

Με πολλά άτομα όμως να εργάζονται στο ίδιο έργο εμφανίζεται ένα πρόβλημα με τη μορφή διαχείρισης αλλαγών που αλληλεπικαλύπτονται. Το Git έχει μια λύση σε αυτό - ονομάζεται Branches (κλαδιά).

Τα Branches, βοηθούν τους ανθρώπους να έχουν τη δική τους ξεχωριστή έκδοση για να δουλέψουν. Τα Branches μπορούν να βασίζονται το ένα στο άλλο, με το κύριο να ονομάζεται “master”.

git branch -c my-branch

Μπορείτε να διαχειριστείτε τα Branches χρησιμοποιώντας την εντολή ````git branchμε ορισμένες πρόσθετες επιλογές. Παραδείγματα αυτών περιλαμβάνουν τα-c,-m,-d```, αντιστοίχως για αντιγραφή, μετακίνηση και διαγραφή. Οι δύο πρώτες επιλογές, που κάνουν την εντολή να δέχεται δύο ορίσματα, χρησιμοποιούν το τρέχοντα Branch από προεπιλογή. Εάν θέλετε έναν εντελώς νέο Branch για οποιονδήποτε λόγο, δεν χρειάζεται να χρησιμοποιήσετε πρόσθετες επιλογές.

Checkouts

Αφού δημιουργήσετε ένα νέο Branch, θα πρέπει να “μετακινηθείτε” σε αυτό για να μπορείτε να εφαρμόσετε όλα τα commits που κάνετε σε αυτό. Για να αλλάξετε το τρέχον Branch, σε ένα άλλο, θα πρέπει να χρησιμοποιήσετε την εντολή git checkout

git checkout my-branch

Συγχώνευση (Merge)

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

git merge my-branch

Remote

Ενώ το Git λειτουργεί τοπικά πολύ καλά, όταν εργάζεστε σε συνεργασία με άλλους, απαιτείται να αποθηκεύετε το αποθετήριο (repository) σας κάπου όπου κάθε συνεργάτης έργου θα έχει πρόσβαση σε αυτό, για να διευκολύνει τη διαδικασία ανάπτυξης. Για αυτό, θα χρειαστείτε ένα απομακρυσμένο αποθετήριο, αποθηκευμένο σε ένα διακομιστή Git ή σε μια πλατφόρμα όπως το GitHub ή το GitLab.

Cloning (Κλωνοποίηση)

Ο πιο συνηθισμένος τρόπος πρόσβασης σε ένα απομακρυσμένο repo είναι με την κλωνοποίηση του. Για αυτό, μπορείτε να χρησιμοποιήσετε την γνωστή εντολή git-clone.

git clone https://github.com/vuejs/vue.git

Push & pull

Για να αποκτήσετε πρόσβαση στα δεδομένα από απομακρυσμένες προελεύσεις, θα πρέπει πρώτα να τα ανακτήσετε. Μια απλή εντολή για αυτό το σκοπό ειναι η git fetch

Χρησιμοποιώντας το git fetch ανακτάτε τις αλλαγές και τα Branches που διαπράχθηκαν από άλλους. Στη συνέχεια, θα πρέπει να τα συγχωνεύσετε με τις δικές σας τοπικές αλλαγές χρησιμοποιώντας το git merge. Το Git παρέχει μια συντόμευση για αυτό, με τη μορφή εντολής git pull, η οποία παίρνει αυτόματα το απομακρυσμένο Branch και το συγχωνεύει με το τρέχον τοπικό Branch.

git pull

Για να προωθήσετε τις αλλαγές σας από το τρέχον Branch στο απομακρυσμένο, μπορείτε να χρησιμοποιήσετε την εντολή git push.

git push origin master

Rebase

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

Πληροφορίες

Γνωρίζουμε ότι το Git αποθηκεύει πολλά δεδομένα πέρα από απλά αρχεία, οπότε, πώς έχουμε πρόσβαση σε αυτά; Το Git παρέχει πολλές χρήσιμες εντολές για αυτό το σκοπό. Η ποιο σημαντική εντολή είναι η git status. Χρησιμοποιώντας τη, μπορείτε να λάβετε βασικές πληροφορίες σχετικά με την τρέχουσα κατάσταση του Git repo, όπως τα τρέχοντα αρχεία.

git status

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

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