Βάιος Κολοφωτιάς Msc Informational Systems Μια εισαγωγή στο GIT
Ιστορία GIT (NOUN) British English slang roughly equivalent to "unpleasant person" "I'm an egotistical bastard, and I name all my projects after myself. First 'Linux', now 'git'. " Linus Torvalds
Ιστορία Το Git είναι ένα κατανεμημένο σύστημα ελέγχου αναθεώρησεων(revisions) και διαχείρισης κώδικα (SCM) με έμφαση στην ταχύτητα, την ακεραιότητα των δεδομένων καθώς και υποστήριξη για κατανεμημένες, μη γραμμικές ροές εργασίας(workflows). To Git είχε αρχικά σχεδιαστεί και αναπτύχθει από τον Linus Torvalds για την διαχείριση της ανάπτυξης του πυρήνα Linux, το 2005, και έκτοτε έχει γίνει το πιο διαδεδομένο σύστημα ελέγχου για την ανάπτυξη λογισμικού. Όπως με τα περισσότερα άλλα κατανεμημένα συστήματα ελέγχου αναθεώρησης, και σε αντίθεση με τα περισσότερα συστήματα client-server, κάθε κατάλογος εργασίας Git είναι ένα πλήρες αποθετήριο με πλήρη ιστορία και όλες τις εκδόσεις με δυνατότητες παρακολούθησης, ανεξάρτητα από την πρόσβαση στο δίκτυο ή έναν κεντρικό server. Όπως και τον πυρήνα του Linux,το Git είναι ελεύθερο λογισμικό και διανέμεται υπό τους όρους της έκδοσης άδειας GNU General Public 2. Η ανάπτυξη του Git άρχισε στις 3 Απριλίου 2005. Το πρόγραμμα ανακοινώθηκε στις 6 Απριλίου και έγινε self-hosting από τις 7 Απριλίου. Το πρώτο merge των πολλαπλών κλαδιών έγινε στις 18 Απριλίου. Ο Torvalds πέτυχε τους στόχους που είχε θέσει για την απόδοσή του στις 29 Απριλίου. Στις 16 Ιουνίου το Git διαχειρίζεται την έκδοση του πυρήνα 2.6.12. Ο Torvalds έδωσε την συντήρηση(maintenance) του project Junio Hamano, σημαντικό contributor, στις 26 Ιουλίου 2005. O Hamano ήταν υπεύθυνος για την έκδοση 1.0 στις 21 Δεκεμβρίου 2005, και παραμένει συντηρητής του έργου
Η man page του GIT
Εγκατάσταση του GIT σε Ubuntu Ανοίγουμε ένα τερματικό (πατάμε Alt+F2 και γράφουμε gnome-terminal σε Gnome) και γράφουμε την ακόλουθη εντολή για την εγκατάσταση. Σε 11.04: sudo apt-get install git ή σε 10.04: sudo apt-get install git-core Αφού ολοκληρωθεί η εγκατάσταση, πρέπει να δώσουμε κάποιες παραμέτρους στο Git: git config --global user.name "Όνομα Επώνυμο" git config --global user.email "myemailaddress@myprovider.com"
Εγκατάσταση του GIT σε Ferora και μεταγλώτιση από τον πηγαίο κώδικα Για Fedora τρέχουμε την εντολή: yum install git-core Για μεταγλώτιση από τον πηγαίο κώδικα θα χρειαστεί να έχετε τις ακόλουθες βιβλιοθήκες στις οποίες βασίζεται το Git: curl, zlib, openssl, expat, and libiconv. Για παράδειγμα, αν είστε σε ένα σύστημα που χρησιμοποιεί yum (όπως το Fedora) ή apt-get (όπως ένα Debian based system-ubuntu), μπορείτε να χρησιμοποιήσετε μια από τις ακόλουθες εντολές για να εγκαταστήσετε τις εξαρτήσεις(dependencies): $ yum install curl-devel expat-devel gettext-devel \ openssl-devel zlib-devel $ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \ libz-dev libssl-dev
Μεταγλώτιση από πηγαίο κώδικα Όταν έχετε όλες τις απαραίτητες εξαρτήσεις, μπορείτε να πάρετε το τελευταίο snapshot από το site του GIT: http://git-scm.com/download Στη συνέχεια, μεταγλωτίστε και εγκαταστήστε:: $ tar -zxf git-1.7.2.2.tar.gz $ cd git-1.7.2.2 $ make prefix=/usr/local all $ sudo make prefix=/usr/local install Αφού γίνει αυτό μπορείτε να πάρετε το Git από το Git(!) για να παίρνετε τις ενημερώσεις: $ git clone git://git.kernel.org/pub/scm/git/git.git
Χαρακτηριστικά του GIT Ισχυρή υποστήριξη για μη-γραμμική ανάπτυξη Κατανεμημένη ανάπτυξη Συμβατότητα με τα υπάρχοντα συστήματα / πρωτόκολλα (http, ftp, svn, ssh) Αποτελεσματική διαχείριση μεγάλων έργων Cryptographic authentication of history Toolkit-με based σχεδιασμός Pluggable στρατηγικές συγχώνευσης
Δημιουργία ενός καινούργιου αποθετηρίου & δημιουργία αντιγράφου υπάρχοντος - Φτιάξτε ένα καινούριο φάκελο με την εντολή Mkdir new Ανοίξτε τον και εκτελέστε την εντολή git init Για να φτιάξετε ένα καινούργιο GIT αποθετήριο(repository) - Δημιουργήστε ένα λειτουργικό αντίγραφο ενός τοπικού αποθετηρίου με την εντολή: git clone /path/to/repository Όταν χρησιμποιείται απόμακρυσμένο server, η εντολή σας θα είναι: git clone username@host:/path/to/repository
Workflow(Ροή Εργασίας) Το τοπικό repository σας αποτελείται από τρία «δέντρα» που τηρούνται από το git. Το πρώτο είναι ο Κατάλογος εργασίας(working directory) σας, o οποίος έχει τα πραγματικά αρχεία. Το δεύτερο είναι το index που λειτουργεί ως χώρος στάσης Και το τρίτο είναι το Head(κεφαλή), το οποίο το οποίο δείχνει το τελευταίο commit που έχετε κάνει.
add & commit(προσθήκη και υποβολή) Μπορείτε να προτείνετε αλλαγές (προσθήκες στο Index) χρησιμοποιώντας τις εντολές: git add <filename> git add * Αυτό είναι το πρώτο βήμα στη βασική ροή εργασία του git. Για να γίνουν πράγματι οι αλλαγές αυτές χρησιμοποιούμε την εντολή git commit -m "Commit message" Τώρα το αρχείο γίνεται commit στο HEAD, αλλά όχι ακόμα στο απομακρυσμένο αποθετήριο
Κάνοντας push τις αλλαγές Οι αλλαγές σας είναι τώρα στο Head του τοπικού αντίγραφο εργασίας σας. Για να στείλετε τις αλλαγές αυτές στο απομακρυσμένο server σας, εκτελέστε git push origin master Αλλάξετε το master σε όποιο κλαδί(branch) θέλετε να ωθήσει τις αλλαγές σας. Αν δεν έχετε κάνει clone ένα υπάρχον αποθετήριο και θέλετε να συνδέσετε το repository σας σε έναν απομακρυσμένο server, θα πρέπει να το προσθέσετε με git remote add origin <server> Τώρα είστε σε θέση να προωθήσετε τις αλλαγές σας στο επιλεγμένο απομακρυσμένο server
Branching(δημιουργώντας κλαδιά!) Τα branches χρησιμοποιούνται για να αναπτυχθούν χαρακτηριστικά(features) απομονωμένα το ένα από το άλλο. Το master branch είναι το default branch μόλις φτιάξουμε ένα αποθετήριο. Χρησιμοποιήστε άλλα branch για την ανάπτυξη και κάντε τα merge(συγχώνευση) πίσω στο main branch μετά την ολοκλήρωση.
Branching(δημιουργώντας κλαδιά!) Φτιάξτε ένα καινούριο branch με το όνομα feature_x και χρησιμοποιήστε αυτό με την εντολή git checkout -b feature_x Γυρίστε πίσω στο master branch με git checkout master Και σβήστε το branch με την εντολή git branch -d feature_x Το branch δεν είναι διαθέσιμο σε άλλους μέχρι να το κάνετε push σε ένα απομακρυσμένο αποθετήριο git push origin <branch>
update & merge(ενημέρωση & συγχώνευση) Για να ενημερώσετε το τοπικό repository σας στο νεότερο commit εκτελέστε git pull στον κατάλογο εργασίας σας για να φέρει και να κάνει merge τις απομακρυσμένες αλλαγές. Για να συγχωνεύσει(merge) ένα άλλο branch στo ενεργό branch σας (π.χ. Master), χρησιμοποιήστε git merge <branch> και στις δύο περιπτώσεις το git προσπαθεί να κάνει auto-merge τις αλλαγές. Δυστυχώς, αυτό δεν είναι πάντα δυνατό και οδηγεί σε συγκρούσεις(conflicts).
update & merge(ενημέρωση & συγχώνευση) Είστε υπεύθυνοι για τη συγχώνευση αυτών των συγκρούσεων και πρέπει να κάνετε επεξεργασία των αρχείων που εμφανίζονται από το git, με το χέρι. Μετά την αλλαγή, θα πρέπει να τα επισημάνετε ως merged με git add <filename> πρίν να κάνετε merge τις αλλαγές μπορείτε να τις δείτε με τη εντολή git diff <source_branch><target_branch>
Ετικέτες(tagging) Συνιστάται να δημιουργήσετε ετικέτες για τις εκδόσεις λογισμικού, ένα γνωστό concept το οποίο υπάρχει επίσης και στο SVN. Μπορείτε να δημιουργήσετε μια νέα ετικέτα που ονομάζεται 1.0.0 εκτελώντας git tag 1.0.0 1b2e1d63ff το 1b2e1d63ff υπάρχει για τους πρώτους 10 χαρακτήρες του commit id στο οποίο θέλετε να παραπέμψετε με την ετικέτα σας.
Log Στην απλούστερη μορφή του, μπορείτε να μελετήσετε την ιστορία του αποθετήριου χρησιμοποιώντας git log Μπορείτε να προσθέσετε πολλές παραμέτρους για να κάνει το log να μοιάζει με ό, τι θέλετε. Για να δείτε μόνο τα commits ενός συγκεκριμένου author: git log --author=bob Για να δείτε ένα πολύ συμπιεσμένο αρχείο καταγραφής(log) όπου κάθε commit είναι μία γραμμή: log git --pretty=oneline Ή μπορεί να θέλετε να δείτε ένα δέντρο ASCII όλων των branches, διακοσμημέo με τα ονόματα των ετικετών και των branches: git log --graph --oneline --decorate all Δείτε μόνο ποία αρχεία έχουν αλλάξει: git log --name-status Αυτές είναι μόνο μερικές από τις παραμέτρους που μπορείτε να χρησιμοποιήσετε. Για περισσότερες πληροφορίες, δείτε το αρχείο καταγραφής git - help
Αντικατάσταση τοπικών αλλαγών Σε περίπτωση που κάνατε κάτι λάθος, μπορείτε να αντικαταστήσετε τις τοπικές αλλαγές χρησιμοποιώντας την εντολή git checkout - <filename> αυτό αντικαθιστά τις αλλαγές στο δέντρο εργασίας σας(working tree) με τα τελευταία περιεχομένα του HEAD. Οι αλλαγές που έχουν ήδη προστεθεί στο Index, καθώς και τα νέα αρχεία, θα διατηροται Αν, αντί γι αυτό,να θέλετε να κάνετε drop όλες τις τοπικές αλλαγές σας και commits, φέρτε το τελευταίο history από τον server και κατευθύνεται το τοπικό master branch σε αυτό, έτσι: git fetch origin git reset --hard origin/master
Χρήσιμα hints built-in git GUI gitk Χρήση πολύχρωμου git output git config color.ui true Εμφάνιση log με μία γραμμή σε κάθε commit git config format.pretty oneline χρήση interactive adding git add -i
Git To GitHub είναι μια Git web-based υπηρεσία φιλοξενίας αποθετηρίων που προσφέρει όλες τις λειτουργίες του Git, καθώς και πολλά δικά της χαρακτηριστικά. Σε αντίθεση με το Git που είναι ένα εργαλείο γραμμής εντολών, το Github παρέχει ένα γραφικό περιβάλλον επιφάνειας εργασίας, ένα web-based, καθώς και έκδοση για κινητά. Παρέχει, επίσης, έλεγχο πρόσβασης και πολλές δυνατότητες συνεργασίας, όπως wikis, task management, και εργαλεία παρακολούθησης σφαλμάτων και feature requests για κάθε έργο. To GitHub προσφέρει τόσο επαγγελματικά πλάνα για ιδιωτικά αποθετήρια(με πληρωμή), καθώς και δωρεάν λογαριασμούς, τα οποία χρησιμοποιούνται συνήθως για να φιλοξενήσουν έργα ανοικτού κώδικα. Μέχρι και το 2014, το Github έχει πάνω από 3,4 εκατομμύρια χρήστες, καθιστώντας το τον μεγαλύτερο code host στον κόσμο. To GitHub έχει γίνει τόσο διαδεδομένο μεταξύ της κοινότητας ανάπτυξης ανοιχτού κώδικα, που πολλοί εργοδότες έχουν αρχίσει να το χρησιμοποιούν σαν αντικατάσταση σε σχέση με ένα συμβατικό βιογραφικό και απαιτούν απαιτούν οι υποψήφιοι να έχουν ενεργό λογαριασμό GitHub, προκειμένου να πληρούν τις προϋποθέσεις για μια θέση εργασίας.
Ρύθμιση του GitHub και συγχρονισμός με το Git. Πάμε στο http://www.github.com και δημιουργούμε έναν δωρεάν λογαριασμό. Δημιουργούμε στον υπολογιστή μας ένα κλειδί SSH, το οποίο απαιτείται για την επικοινωνία με το github.com ssh-keygen -t rsa -C "myemailaddress@myprovider.com" Βάζουμε έναν κωδικό και το αποθηκεύουμε στο default μέρος. Θα δούμε τον κωδικό που δημιουργήθηκε, πατώντας ls -l ~/.ssh/ Το id_rsa.pub περιέχει το δημόσιο κλειδί, το οποίο θα δώσουμε στο github, ενώ το id_rsa είναι το ιδιωτικό, το οποίο το κρατάμε μόνο για εμάς. Βάζουμε το δημόσιο κλειδί στο github.com > Account Settings > SSH Public Keys > Add another public key.
Ρύθμιση του GitHub και συγχρονισμός με το Git. Για να φτιάξουμε ένα νέο αποθετήριο στο github.com, πάμε στην αρχική του σελίδα και πατάμε στο Create a new repository. Ακολουθούμε τις οδηγίες και πατάμε τις εντολές που μας εμφανίζει στο τερματικό, ενώ βρισκόμαστε στον κατάλογο του αποθετηρίου μας. Τώρα ο κώδικάς μας βρίσκεται στο αποθετήριο που δημιουργήσαμε στο GitHub. Αν έχουμε προσθέσει κάποιον συνεργάτη (collaborator) στο GitHub για το αποθετήριο και έχει προβεί σε κάποιες αλλαγές, μπορούμε να ενημερώσουμε το αποθετήριο στον υπολογιστή μας με την εντολή git pull --rebase Για να κατεβάσουμε κώδικα από το GitHub στον υπολογιστή μας, βρίσκουμε το αποθετήριο που μας ενδιαφέρει, παίρνουμε το URL για το Git Read-Only και γράφουμε git clone URL
Χρήσιμα Links Git Community Book: http://git-scm.com/book Think like a Git: http://think-like-a-git.net/ GitHub Help: https://help.github.com/ A visual Git Guide: http://marklodato.github.io/visual-git-guide/index -en.html Intro to Git & GitHub: https://speakerdeck.com/matthewmccullough/intr o-to-git-and-github Git to SVN: http://www.slideshare.net/itbooze/git-11446659 Git Basics: http://almar.io/2013/10/git-basics-git-flow-presen tation/ Git for beginners: The definitive practical guide: http://stackoverflow.com/questions/315911/git-for -beginners-the-definitive-practical-guide
Ευχαριστώ για την προσοχή σας!