Γρήγορη εισαγωγή στο git

Σημείωση, αυτό το είχα γράψει το 2013 στο ελληνικό φόρουμ τού ubuntu, ναι το θυμήθηκα επειδή ανέβασε παρόμοιο ο Talos, και είπα να το έχω και εδώ.

Το git είναι ένα VCS δηλαδή σύστημα ελέγχου τροποποιήσεων (version control system).

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

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

Αυτή η γρήγορη εισαγωγή είναι σε γραμμή εντολών. Ανεξάρτητα αν μπορεί να χρησιμοποιηθεί από γραφικό περιβάλλον πιστεύω ότι κάποιος πρέπει πρώτα να πάρει μια ιδέα σε γραμμή εντολών. Σε όποιον δεν έχει CLUE (command line user experience) ανεξάρτητα από το αν θέλει να μάθει git προτείνω να διαβάσει τα μαθήματα γραμμής εντολών

Χαρακτηριστικά git
Απλότητα
Ψηφιακή υπογραφή κάθε τροποποίησης (SHA1). Δεν πρόκειται να αλλοιωθούν δεδομένα για οποιονδήποτε λόγο χωρίς να το καταλάβετε.
Εύκολο στήσιμο, εύκολη διακλάδωση και εύκολη συγχώνευση αποθετηρίων
Απίστευτες επιδόσεις

Εγκατάσταση
Σε όλες τις διανομές λίνουξ πρέπει να υπάρχει στο αντίστοιχο κέντρο λογισμικού.
Για τις debian-οειδείς διανομές, όπως το Ubuntu, μπορείτε εναλλακτικά να χρησιμοποιήσετε την εντολή:

sudo apt-get install git

Σε παλιότερες εκδόσεις (πχ ubuntu 10.04) αντί για git έχουμε git-core.

Γενική σύνταξη εντολών
git εντολή επιλογές και ορίσματα

Ρύθμιση (config)
Πριν το χρησιμοποιήσετε υπάρχουν δυο υποχρεωτικές ρυθμίσεις, πρέπει να δώσετε το όνομά σας και την διεύθυνσή σας.

git config --global user.name "Όνομα Χρήστη"
git config --global user.email "διεύθυνση@χρήστη"

Η επιλογή –global αποθηκεύει τις ρυθμίσεις στο αρχείο ~/.gitconfig

Επιπλέον υπάρχουν και άλλες μη υποχρεωτικές ρυθμίσεις. Ιδιαιτέρως χρήσιμη είναι να έχετε χρώμα.

git config --global color.ui true

Είναι αναγκαίος επίσης και ένας επεξεργαστής κειμένου. Μπορείτε να τον ρυθμίσετε με

git config --global core.editor nano

Αντί για nano που είναι εύκολος και επαρκής μπορείτε να βάλετε έναν άλλο τής αρεσκίας σας. Αν δεν τον ρυθμίσετε το git θα επιλέξει αυτόματα τον βασικό επεξεργαστή τού συστήματός σας (πιθανότατα είναι έτσι και αλλιώς ο nano)

Αρχικοποίηση (init)
Πηγαίνετε στον φάκελο που θέλετε να κάνετε την εργασία σας και δίνετε

git init

Τόσο απλό! Αυτό δημιουργεί έναν φάκελο .git στον οποίο βρίσκεται το αποθετήριο και γίνονται όλα τα μαγικά.

Κατάσταση (status)

git status

Αν έχετε αρχεία στον φάκελο θα δείτε τώρα ότι δεν παρακολουθούνται (untracked)

Προσθήκη (add)

git add όνομα_αρχείου

Τα αρχεία που κάνετε add παρακολουθούνται.

Κομιδή (commit)
Οκ φαντάζομαι μερικοί τώρα ίσως βγάζουν τα μάτια τους με κουτάλι με αυτήν την επιλογή λέξης. Δεν πειράζει, εμένα μού αρέσει. Τελικά έτσι αποφάσισα να αποδώσω τον όρο που σημαίνει την πράξη στο αποθετήριο. (στα νέα ελληνικά χρησιμοποιείται κυρίως σε σύνθετες λέξεις όπως «συγκομιδή» και έχει γίνει σχετικά πρόσφατα λίγο πιο διάσημη με τούς «κομιστές»)

git commit -a

Αυτό θα ανοίξει έναν επεξεργαστή (λογικά τον nano) στον οποίο θα γράψετε πληροφορίες για την τροποποίηση. Μπορείτε να γράψετε απλώς μια φράση ή μπορείτε να γράψετε έκθεση ιδεών. Αν θέλετε να δώσετε εκτενέστερες πληροφορίες χρησιμοποιήστε την πρώτη γραμμή σαν θέμα.

Η επιλογή “-a” σημαίνει η πράξη να γίνει σε όλα τα αρχεία που παρακολουθούνται. Αυτό έχει μεγάλη σημασία γιατί το git προκειμένου να προσφέρει μεγαλύτερη ευελιξία στον χρήστη κρατά τις τροποποιήσεις όπως ήταν όταν έγινε τελευταία φορά add. Αυτό σημαίνει ότι αν κομίσετε μετά τροποποιήσετε και μετά επιχειρήσετε να ξανακομίσετε χωρίς την επιλογή -a το git δεν θα δει τις αλλαγές! Πρέπει να ξαναπροσθέσετε τα αρχεία που σάς ενδιαφέρουν. Η επιλογή -a ξαναπροσθέτει όλα τα αρχεία που παρακολουθούνται και κομίζονται όλες οι τροποποιήσεις. Για να το ξεκαθαρίσετε καλύτερα ο χαρακτηρισμός εκτός σκηνής (not staged) αφορά τροποποιήσεις και όχι τα ίδια τα αρχεία, ενώ ο χαρακτηρισμός εκτός παρακολούθησης (untracked) αφορά αρχεία. Έτσι αν κάνετε αλλαγές σε ένα αρχείο, το προσθέσετε και μετά ξανακάνετε αλλαγές, στην κατάσταση θα βρεθεί και επί σκηνής και εκτός σκηνής. Το πρώτο αναφέρεται στις πρώτες αλλαγές που είναι έτοιμες για κομιδή και το δεύτερο στις δεύτερες αλλαγές που θα κομιστούν αν χρησιμοποιήσετε την επιλογή -a

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

git add *

Ο φλοιός θα κάνει το ανάπτυγμα και το git θα δει τα ορίσματα που θα τού δώσει το bash. Αν οι ονομασίες σας είναι καλές (πχ δεν έχουν κενά) στην συγκεκριμένη περίπτωση δεν έχουμε πρόβλημα. Το git όμως έχει ανεξάρτητα την δυνατότητα να χρησιμοποιήσει μπαλαντέρ. Έτσι αν δώσετε:

git add "*"

O φλοιός τώρα θα δει τα εισαγωγικά και θα παραδώσει το αστεράκι στο git. Το git μπορεί να κάνει ανεξάρτητα το ανάπτυγμα και θα το κάνει σωστά αν έχουμε προβληματικές περιπτώσεις. Δεν είναι μόνο οι περιπτώσεις προβληματικών ονομάτων. Γενικότερα πρέπει να έχετε υπόψιν αυτό το χαρακτηριστικό τού φλοιού και αυτήν την δυνατότητα τού git. Τα εισαγωγικά γενικά είναι καλή συνήθεια.

βοήθεια (help)
με την help μπορείτε να ανοίγετε τα εγχειρίδια τών διαφόρων εντολών τού git, πχ

git help log

αυτό το παράδειγμα το δίνω για να σάς τρομάξω ;D

8 Likes

:laughing:

Έτσι απλά για να ανταλλάζουμε απόψεις, το commit δεν έχει την έννοια της μεταφοράς, του κομίζω δηλαδή, αλλά την έννοια του διαπράττω, φέρνω σε πέρας. ολοκληρώνω από την αρχή ως το τέλος. Μ’ αρέσει να το σκέφτομαι πως, η πράξη του να κάνεις commit λέγεται commitment που συνήθως μεταφράζεται ως δέσμευση, δέσμευση πως αυτό που θα αναλάβεις θα το φέρεις εις πέρας. Στην περίπτωση του git, θα κάνεις commit.

1 Like

Εδώ έχει και τα δυο, έχει ξεκάθαρα ΚΑΙ την έννοια της μεταφοράς. γιατί μεταφέρεις την τροποίηση στο αποθετήριο.

λεξικό

1 Like

Με κάψατε Δευτεριατικα παλιόπαιδα :joy::joy::joy:

2 Likes

μόνο ο απαραίτητος κώδικας για γρήγορη εισαγωγή στο git :slight_smile:

2 Likes

Καλώς ήρθες @elpak στην κοινότητα μας.

1 Like

Καλωσόρισες στο φόρουμ @elpak

1 Like