logo

Χρησιμοποιώντας το git

Χρησιμοποιώντας το git

Ετικέτες: git

Το git είναι η το πιο ευρέως χρησιμοποιούμενο version control system στον κόσμο, είναι ανοιχτού κώδικα και βασικά το λατρεύουμε γιατί κάνει τη δουλειά μας πολύ πιο εύκολη. Για όσους μπορεί να μη γνωρίζουν ποια η χρησιμότητά του, στην ουσία εκτός απο το να λειτουργεί ως repository για τα αρχεία ενός project που είναι υπό κατασκευή μας παρέχει ταυτόχρονα και ιστορικό των εκδόσεων όλων αυτών των αρχείων ώστε να μπορούμε να ανατρέξουμε σε προηγούμενη έκδοση ανά πάσα στιγμή αλλά και να λύνουμε επιτόπου τυχόν conflicts που μπορεί να προκύπτουν με προσθήκες/αλλαγές που κάνουν οι συνεργάτες μας στο ίδιο repository. Θα δούμε σταδιακά κάποια βήματα προς τη δημιουργία και χρήση ενος git repository.

Εγκατάσταση

Eγκαθιστούμε το git ακολουθώντας οδηγίες σε αυτή στη σελίδα.

Δημιουργία νέου repository

Δημιουργούμε ένα καινούργιο directory, μπαίνουμε στο directory, ανοίγουμε το git bash (στις επιλογες του right click) “τρέχουμε” την εντολή git init ώστε να κάνουμε initialize το καινούργιο μας git repository. Επίσης πρέπει να δούμε τι θα κάνουμε ignore στο git μας πράγματα που δεν χρειάζεται. πχ δείτε εδώ για το wp

Checkout

Για τη δημιουργία αντιγράφου ενός τοπικού repository “τρέχουμε” git clone /μονοπάτι/προς/το/repository.
Αν, δε, χρησιμοποιούμε server, η εντολή θα είναι git clone username@host:/μονοπάτι/προς/το/repository.

“Ροή” του repository

Το τοπικό μας repository αποτελείται απο 3 “trees” που διατηρούνται απο το git. Το 1ο είναι το Working Directory στο οποίο βρίσκονται τα αρχεία που δουλεύουμε. Το 2ο ειναι ο Index που δρα ως περιοχή “staging”, δηλαδή περιοχή στην οποία υπάρχουν αλλαγές που δεν έχουν ακόμα επιβεβαιθεί ως αλλαγές στον κυρίως κορμό αρχείων (ίσως θέλουμε να κάνουμε περισσότερους ελέγχους). Το 3ο ειναι η κεφαλή HEAD που δείχνει στο τελευταίο commit που έχουμε κάνει, για το οποίο commit θα μιλήσουμε αμέσως.

Add & Commit

Αφού κάνουμε έναν αριθμό αλλαγών που έχουν προχωρήσει σε κάποιο βαθμό το project μας θα θελήσουμε να περάσουμε τις αλλαγές στο repository. Το πόσο συχνά το κάνουμε αυτό αυτό αφήνεται στην προσωπικη κρίση του καθενός, αναλόγα με τη φύση του project, τους συνεργάτες μας, κ.λπ.). Αρχικά προτείνουμε τις αλλαγές μας (προσθήκη στο Index) κάνοντας git add filename ή αν “τρέχουμε” την εντολή μέσα στο directory git add .. Για να κάνουμε commit (αποδοχή της προσθήκης) τις αλλαγές που κάναμε add θα πρεπει να κάνουμε git commit -m "Μήνυμα που εξηγεί τι αλλαγές έγιναν". Ένα σχόλιο πάνω στα μήνυματα αυτά…

Push

Τώρα οι αλλαγές έχουν γίνει commit στο HEAD αλλά δεν έχουν περάσει στο remote repository μας ακόμα. Για να τις στείλουμε εκτελούμε την εντολή git push original master. Αντί για “master” μπορούμε να στείλουμε τις αλλαγές σε οποιοδήποτε branch θέλουμε (θα πούμε για τα branches αμέσως!). Αν δεν έχουμε κάνει clone το repository μας και θέλουμε να συνδέσουμε σε κάποιον remote server κάνουμε git remote add origin *server* και μετά μπορούμε να κάνουμε push κανονικά.

Branches

Λοιπόν, branches! Xρησιμοποιούνται για να δουλέψουμε ξεχωριστά πάνω στα ίδια αρχεία. Υπάρχει το “master” branch που είναι το default όταν δημιουργείται το repository. Στην ουσία το master το κρατάμε ως το repository στο οποίο δίνουμε κάθε αλλαγή αφού βεβαιωθούμε ότι δουλεύει τέλεια και έτσι περιέχει, σχηματικά, την τελευταία έκδοση του project μας. Τα υπόλοιπα branches τα χρησιμοποιούμε για να δουλέψουμε πάνω σε προσθήκες, αλλαγές, κ.λπ. Όταν ολοκληρώσουμε ένα κομμάτι αλλαγών στο branch μας κάνουμε merge το branch μας με το master ώστε να έχουμε το master διαρκώς ανανεωμένο.

Στο πρακτικό κομμάτι τώρα. Πρώτα δημιουργούμε καινούργιο branch (και το κάνουμε το ενεργό μας branch, φεύγοντας απο το master) κάνοντας git checkout -b ονομα_του_καινουργιου_branch. Για να γυρίσουμε στο master “τρέχουμε” git checkout master (η όποιο άλλο branch θέλουμε, αλλάζοντας αντίστοιχα το “master”). Για να διαγράψουμε ένα branch κάνουμε git branch -d ονομα_του_branch_που_θελουμε_να_διαγραφει. Ένα branch δεν έιναι διαθέσιμο σε άλλους αν δεν το στείλουμε στο remote repository μέσω του git push origin ονομα_του_branch.

Update & Merge

Ενώ δουλεύουμε, θέλουμε να έχουμε την τελευταία έκδοση του project στο τοπικό repository. Άρα, πριν ξεκινήσουμε να δουλεύουμε πάνω σε αλλαγές, βεβαιωνόμαστε ότι έχουμε τα πάντα ανανεωμένα “κατεβάζοντας” πιθανές αλλαγές μέσω του git pull. Για να κάνουμε merge ένα branch στο master κάνουμε git merge ονομα_του_branch. Πολλές φορες μπορεί να υπάρχουν conflicts ανάμεσα σε branches (π.χ. δουλέψανε 2 άτομα το ίδιο αρχείο και το ίδιο block κώδικα – που δε συνίσταται φυσικά). Το git μας ενημερώνει που βρίσκονται τα conflicts ώστε να κάνουμε αλλαγές και να δουλέψουν όλα ρολόι. Πριν κάνουμε merge μπορούμε επίσης να κάνουμε μια προεπισκόπηση του merge “τρέχοντας” git diff απο_εδω_γινεται_merge_προς_το_αλλο_branch branch_στο_οποιο_γινεται_merge.

Αντικαθιστώντας τοπικές αλλαγές

Αν κάτι πάει στραβά στο τοπικό μας directory κάνουμε git checkout -- filename για να κάνουμε επαναφορά στο τελευταίο περιεχόμενο του HEAD. Αλλαγές που ήδη έχουν προστεθεί στο Index (+ νέα αρχεία) διατηρούνται. Αν θέλουμε να πετάξουμε τις αλλαγές μας και να πάρουμε την τελευταία έκδοση απο τον server κάνουμε git fetch origin και git reset --hard origin/master.

Εν κατακλείδι

Πιστεύουμε πως καλύψαμε τα βασικά του git αλλά υπάρχουν και πολλές περισσότερες λειτουργίες, π.χ. git tag, git log, git config, gitk(GUI) και δε συμμαζεύεται. Δε μπορούμε να προβλέψουμε τις πιθανές ιδιαιτερότητες της δουλειάς του εκάστοτε χρήστη ούτε είναι στόχος αυτού του άρθρου, οπότε για ό,τι προκύψει (και κλασικά προκύπτει), ψαχτείτε και καλή τύχη!

Περί σχολίων στα commit…

Εδώ να κάνουμε μια επισήμανση. Το επεξηγηματικό μήνυμα κατά το commit είναι κάτι προεραιτικό αλλά κατ’ εμάς είναι σχεδόν απαραίτητο. Μπορεί σε κάποιο project να μη φανεί κάποια διαφορά (αμφιβάλουμε αλλά ώρα καλή στην πρύμνη σας κι αέρα στα πανιά σας) αλλά θα υπάρχει πρόβλημα αν δουλέψουμε κάτι πιο περίπλοκο, κάτι που παίρνει μεγάλο διάστημα και άρα ξεχνάμε στην πορεία που έχουμε κάνει ποιές αλλαγές, αν χρειάζεται να κάνουμε revert σε προηγούμενες εκδόσεις συχνά και ειδικά αν δουλεύουμε με συνεργάτες οι οποίοι θα θέλουν να καταλαβαίνουν τι έχουμε αλλάξει. Κλείνουμε την παρένθεση αυτή και συνεχίζουμε!

1 found this helpful