Αρχιτεκτονική Υπολογιστών

Σχετικά έγγραφα
Αρχιτεκτονική Υπολογιστών

Σεμινάριο Git & GitLab. Γιώργος Τσιάτσιος Δημήτρης Κάσσος

Εργαστήριο 2. Εισαγωγή στο Git Versioning System

Σεμινάριο Git & GitLab. Τάκης Παναγόπουλος Νικόλας Μπομπέτσης

Subversion. Τριγάζη Ελισάβετ. Επιβλέπων: Μηνάς Δασυγένης

Σεμινάριο Git & GitHub. Θέμης Παπαμελετίου Διονύσης Ζήνδρος

Αρχιτεκτονική Υπολογιστών

Σύντομος Οδηγός Github Μηνάς Δασυγένης (

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονική Υπολογιστών

Υπολογιστές Ι. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Πανεπιστήμιο Κρήτης, Τμήμα Επιστήμης Υπολογιστών ΗΥ463 Συστήματα Ανάκτησης Πληροφοριών Χειμερινό Εξάμηνο

Μικροβιολογία & Υγιεινή Τροφίμων

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: Εισαγωγή ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Εισαγωγή στους Αλγορίθμους

Εισαγωγή στους Αλγορίθμους

Αρχιτεκτονική Υπολογιστών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

SUBVERSION. Διδάσκοντες: Π. Αγγελάτος, Δ. Ζήνδρος Επιμέλεια διαφανειών: Δ. Ζήνδρος Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δομή του προγράμματος. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Βάιος Κολοφωτιάς Msc Informational Systems. Μια εισαγωγή στο GIT

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: Χρήση εργαλείων Εικόνων, Εντολών και Ετικετών ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Αρχιτεκτονική Υπολογιστών

Διαφήμιση και Δημόσιες Σχέσεις Ενότητα 9: Σχέσεις διαφημιστή-διαφημιζόμενου

Ιστορία της μετάφρασης

Σεμινάριο Git & GitHub Ημέρα 2

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ ΦΥΣΙΚΟΧΗΜΕΙΑ ΙΙ

Εκκλησιαστικό Δίκαιο. Ενότητα 10η: Ιερά Σύνοδος της Ιεραρχίας και Διαρκής Ιερά Σύνοδος Κυριάκος Κυριαζόπουλος Τμήμα Νομικής Α.Π.Θ.

Ειδικά Θέματα Δικτύων Ι

ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΕΣ ΤΕΧΝΙΚΕΣ Σύντομη εισαγωγή στο εργαστήριο

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

ΥΠΟΛΟΓΙΣΤΕΣ ΙI. Άδειες Χρήσης. Δείκτες Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Βασικοί άξονες Μαθηματικά στην εκπαίδευση:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συνδυαστική Ανάλυση Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

Εισαγωγή στους Αλγορίθμους

Εφαρμοσμένη Στατιστική

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Αρχιτεκτονική Υπολογιστών

Εργαστήριο Χημείας Ενώσεων Συναρμογής

Εισαγωγή στην Πληροφορική

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Διδακτική της Πληροφορικής

ΣΥΣΤΗΜΑΤΑ ΗΛΕΚΤΡΙΚΗΣ ΕΝΕΡΓΕΙΑΣ ΙIΙ

Ηλεκτρονικοί Υπολογιστές I

Διδακτική της Περιβαλλοντικής Εκπαίδευσης

Open eclass Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης

Θερινό Σχολείο, Ιουλίου Εισαγωγή στο. Αχιλλέας Πιπινέλης. Μονάδα Αριστείας ΕΛ/ΛΑΚ ΤΕΙ Αθήνας

Γενικά Μαθηματικά Ι. Ενότητα 15: Ολοκληρώματα Με Ρητές Και Τριγωνομετρικές Συναρτήσεις Λουκάς Βλάχος Τμήμα Φυσικής

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: ΔΟΜΕΣ ΕΠΑΝΑΛΗΨΗΣ ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Εργαστήριο Χημείας Ενώσεων Συναρμογής

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Τίτλος Μαθήματος: Ηλεκτρονικοί Υπολογιστές IΙΙ. Διδάσκων: Επίκουρος Καθηγητής Αθανάσιος Σταυρακούδης

Ενότητα. Εισαγωγή στη Microsoft Access

Σχεδίαση Δικτύων Υπολογιστών

Οργάνωση και Διοίκηση Πωλήσεων Ενότητα 1: Ο ΡΟΛΟΣ ΤΩΝ ΠΩΛΗΣΕΩΝ ΣΤΟ ΠΛΑΙΣΙΟ ΤΗΣ ΣΤΡΑΤΗΓΙΚΗΣ ΜΑΡΚΕΤΙΝΓΚ

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

ΓΕΝΙΚΗ ΚΑΙ ΑΝΟΡΓΑΝΗ ΧΗΜΕΙΑ

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Εφαρμοσμένη Στατιστική

Οδηγός για το... Git & Github

ΔΙΔΑΚΤΙΚΗ ΤΗΣ ΚΑΛΑΘΟΣΦΑΙΡΙΣΗΣ Ι

Ανοικτό Ψηφιακό Μάθημα για την κατάρτιση του προσωπικού υποστήριξης ανάπτυξης ψηφιακών μαθημάτων

Διδακτική της Πληροφορικής

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

Γενικά Μαθηματικά Ι. Ενότητα 12: Κριτήρια Σύγκλισης Σειρών. Λουκάς Βλάχος Τμήμα Φυσικής ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ

ΕΡΓΑΣΤΗΡΙΟ ΦΥΣΙΚΗΣ Ι ΘΕΩΡΙΑ ΣΦΑΛΜΑΤΩΝ. Κανονισμός Μαθήματος και Εργαστηρίου Καθηγήτρια Γεωργά Σταυρούλα Τμήμα Φυσικής

Εκκλησιαστικό Δίκαιο

Ασφάλεια Υπολογιστικών Συστημάτων

Τεχνολογία Λογισμικού

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους

Υπολογιστές Ι. Άδειες Χρήσης. Τύποι δεδομένων. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Θεσμοί Ευρωπαϊκών Λαών Ι 19 ος -20 ος αιώνας

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ. Πιθανότητες. Συναρτήσεις πολλών μεταβλητών Διδάσκων: Επίκουρος Καθηγητής Κωνσταντίνος Μπλέκας

Εργαστήριο Χημείας Ενώσεων Συναρμογής

Μηχανολογικό Σχέδιο Ι

Πλατφόρμα Ασύγχρονης Τηλεκπαίδευσης eclass 1.7. Οδηγίες Αναβάθμισης (Upgrade) Αθήνα, 16 Μαρτίου Εισαγωγή

Σχεδίαση Δικτύων Υπολογιστών

Διδακτική της Περιβαλλοντικής Εκπαίδευσης

Στρατηγικό Μάρκετινγκ

Εφαρμογές των Τεχνολογιών της Πληροφορίας και των Επικοινωνιών στη διδασκαλία και τη μάθηση. Ενότητα 6: Πλαίσιο Σχεδιασμού και αναφοράς Σεναρίου

Υπολογιστές Ι. Άδειες Χρήσης. Εισαγωγή. Διδάσκοντες: Αν. Καθ. Δ. Παπαγεωργίου, Αν. Καθ. Ε. Λοιδωρίκης

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

Μαθηματικά και Φυσική με Υπολογιστές

Εκκλησιαστικό Δίκαιο

ΓΕΝΙΚΗ ΚΑΙ ΑΝΟΡΓΑΝΗ ΧΗΜΕΙΑ

Λογιστική Κόστους Ενότητα 11: Λογισμός Κόστους (1)

Διοικητική Λογιστική

Επιχειρησιακή Έρευνα

Προγραμματισμός Ηλεκτρονικών Υπολογιστών 2 - Εργαστήριο

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Άσκηση Αλγόριθμος Dijkstra

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

Transcript:

ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Οδηγίες GitHub Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου

Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.

ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Oδηγίες git, GitHub Αρης Ευθυμίου Πηγές: Timothy Wood - Git & GitHub: h?p://faculty.cs.gwu.edu/~lmwood/wiki/doku.php/learn:git Git Immersion: h?p://gilmmersion.com/index.html

Το σημερινό μάθημα Τί είναι το Git και το GitHub Αποθετήρια δημιουργία κλωνοποίηση Στιγμιότυπα Κατάλογος εργασίας και στιγμιότυπα Απομακρυσμένα αποθετήρια Χρήση 2 τοπικών αποθετηρίων Αναίρεση αλλαγών Προχωρημένη χρήση - παρακλάδια 2

Τι είναι το git Το git είναι ένα σύστημα διαχείρισης εκδόσεων αρχείων Στα Αγγλικά: version control system Παρακολουθεί τις αλλαγές σε ένα σύνολο αρχείων κρατώντας στιγμιότυπά τους Το σύνολο στιγμιοτύπων ονομάζεται αποθετήριο (repository) Ολα τα αρχεία και υποκατάλογοι κάτω από ένα «πατρικό» κατάλογο Χρήσεις: επιστροφή σε μια παλιότερη έκδοση αν έχει γίνει κάποιο λάθος δοκιμή παραλλαγών (ονομάζονται παρακλάδια - branches) χωρίς να επηρεάζεται η τρέχουσα κατάσταση των αρχείων 3

Τι είναι το GitHub Το GitHub είναι ένας εξυπηρετητής που φιλοξενεί αποθετήρια και μια εύχρηστη διεπαφή ιστού υποστηρίζει όλες τις εντολές του git και παρέχει μερικές επιπλέον δυνατότητες Η εγγραφή χρηστών και η φιλοξενία ανοιχτών (public) αποθετηρίων είναι δωρεάν άλλες χρήσεις χρειάζονται πληρωμή (ιδιωτικά αποθετήρια) Είναι εξαιρετικά δημοφιλές εργοδότες υποθέτουν ότι αιτούντες εργασία θα το γνωρίζουν ένας τρόπος να (απο/επι)δείξει κανείς τις ικανότητές του συμμετοχή σε κοινά project, δημοσίευση project μαθημάτων,... Υπάρχουν και άλλες αντίστοιχες υπηρεσίες π.χ. BitBucket 4

GitHub organizalons Εκτός από αποθετήρια μεμονωμένων ανθρώπων παρέχονται αποθετήρια για οργανισμούς Οπως ο UoI- CSE- MYY402 Κάτι σαν υπερ- κατάλογος αποθετηρίων με ομάδες ανθρώπων να μοιράζονται αποθετήρια Διάφορα επίπεδα προσβασης διαχειριστής, μόνο ανάγνωση, εγγραφή,... 5

Γιατί τα χρησιμοποιούμε Εξαιρετικά χρήσιμα ως εργαλεία οργάνωση εργασιών, συνεργασία σε ομαδικά project,... de facto προαπαιτούμενα για εύρεση εργασίας χρήσιμα για παράδοση εργασιών/ασκήσεων Το μάθημα απαιτεί ελάχιστη χρήση τους μόνο παραλαβή, παράδοση κώδικα εργασιών ελάχιστος χρόνος εκμάθησης (για απλή χρήση) Σκοπός γνωριμία, βασική χρήση για το μάθημα πειραματισμός, βαθύτερη γνώση για προσωπική χρήση και εξέλιξη δεξιοτήτων 6

Εφαρμογές git, ρυθμίσεις Θα χρησιμοποιήσουμε το git από τερματικό υπαρχουν και GUIs. Δείτε το φυλλάδιο του lab 0. Εγκατάσταση από h?p://git- scm.com/downloads απλές οδηγίες, δε θα πρέπει να έχετε δυσκολίες ήδη εγκατεστημένο στους υπολογιστές των εργαστηρίων Εγγραφή στο GitHub h?ps://educalon.github.com/pack Ρυθμίσεις όνομα χρήστη και διεύθυνση email git config --global user.name "Your Name git config --global user.email "email@u Για email χρησιμοποιείστε τη διεύθυνση που δώσατε στο GitHub 7

Δημιουργία αποθετηρίου Για το μάθημα τα αποθετήρια θα είναι έτοιμα στο GitHub θα χρειαστεί κλωνοποίηση για να έχετε «αντίγραφο εργασίας» σε κάθε άσκηση θα παίρνετε ένα κατάλογο με τα επιπλέον αρχεία Στο GitHub, στη σελίδα σας πατήστε το πράσινο κουμπί: New Repository και δώστε ένα όνομα αυτό δημιουργεί αποθετήριο μόνο στο GitHub δεν θα έχετε τοπικό αντίγραφο. Βλ. κλωνοποίηση Σε υπολογιστή (προσωπικό ή εργαστηρίου) σε τερματικό, σε ένα κατάλογο: git init αυτό δημιουργεί μόνο τοπικό αποθετήριο, όχι στο GitHub 8

Κλωνοποίηση αποθετηρίου Το αποθετήριο του GitHub είναι για αποθήκευση, συνεργασία Δεν μπορείς να μεταγλωτίσεις, να τρέξεις προγράμματα,... Χρειάζεται ένα τοπικό αντίγραφο, κλώνος (clone) με αντίγραφα όλων των αρχείων του τρέχοντος στιγμιότυπου, στον υπολογιστή που έχετε μπροστά σας είτε στο εργαστήριο ή στο σπίτι ή και στα δύο (βλ. παρακάτω) Κλωνοποίηση: 1. βρείτε το URL του αποθετηρίου σας στο GitHub μοιάζει με h?ps://github.com/username- or- ORGNAME/REPO.git Κάτω δεξιά στην ιστοσελίδα του αποθετηρίου 2. δημιουργήστε τον κλώνο: Εντολή σε τερματικό: git clone <URL> Θα δημιουργηθεί κατάλογος με το όνομα του αποθετηρίου Ο κατάλογος ονομάζεται κατάλογος εργασίας (working- directory) 9

Στιγμιότυπα 1/2 Το git κρατάει στιγμιότυπα μόνο όταν το ζητήσουμε με την εντολή git commit τα στιγμιότυπα ονομάζονται commits Τα commits καταγράφουν κάποιο «σημαντικό γεγονός» την ολοκλήρωση κάποιου μέρους της δουλειάς π.χ. αρχή του project, προσθήκη υπορουτίνας Α, το σημαντικό είναι υποκειμενικό: καλύτερα να υπάρχουν πολλά commits Aπαιτείται ένα μικρό κείμενο που περιγράφει το γεγονός ονομάζεται commit message 10

Στιγμιότυπα 2/2 Υπάρχουν πολλά commits και το git έχει τη δυνατότητα να τα βρεί κάθε commit έχει ένα μοναδικό κωδικό, ονομάζεται hash είναι ένας πολύ μακρύς δεκαεξαδικός αριθμός πληροφορία στον κρυφό υποκατάλογο.git του working directory Υπάρχει πάντα ένα τρέχον στιγμιότυπο που έχει το όνομα HEAD το HEAD δείχνει σε άλλο στιγμιότυπο όταν κάνουμε commit Τα στιγμιότυπα σχετίζονται εκτός από το αρχικό, κάθε στιγμιότυπο προκύπτει από ένα προηγούμενο με μερικές αλλαγές σειρά αλλαγών μέχρι τώρα, εντολή: git log 11

Kατάλογος εργασίας, στιγμιότυπα Ποιά η διαφορά ενός «στιγμιότυπου» από το σύνολο αρχείων του καταλόγου εργασίας που βλέπω τώρα; Τα αρχεία που φαίνονται στον κατάλογο εργασίας... μπορεί να είναι τα ίδια με ένα στιγμιότυπο (συνήθως το τρέχον), αλλά μπορεί και να έχουν αλλάξει Επιπλέον μπορεί να υπάρχουν αρχεία που δεν είναι μέρος του στιγμιότυπου Συνήθως παραγόμενα αρχεία: εκτελέσιμα, object, log κ.α. ή αρχεία που μόλις προστέθηκαν και δεν έχουν κρατηθεί σε κάποιο στιγμιότυπο ακόμη Το αποθετήριο είναι, χονδρικά, το σύνολο των στιγμιοτύπων πληροφορία κρατιέται στο.git του καταλόγου εργασίας και στο GitHub (ή και αλλού) 12

Προσθήκη σε στιγμιότυπο Γίνεται σε δύο στάδια προσωρινή προσθήκη εντολή: git add τελική προσθήκη εντολή: git commit Γιατί χωριστά στάδια: ευελιξία για προχωρημένους χρήστες Χρήσιμη εντολή: git status ποιά αρχεία «παρακολουθούνται» (έχουν γίνει add) ποιά έχουν αλλάξει (είτε παρακολουθούνται, είτε όχι) και πολλά άλλα 13

Προσωρινή προσθήκη Ονομάζεται staging (ή add to Index) Είναι η στιγμή που κρατιέται το στιγμιότυπο Αν ξανα- αλλάξει το αρχείο από τότε μέχρι την τελική προσθήκη, οι αλλαγές δεν θα καταγραφούν στο στιγμιότυπο. αν δεν ξαναγίνει προσωρινή προσθήκη Απαραίτητη για κάθε αλλαγή σε αρχείο όχι μόνο για νέα αρχεία που θέλετε να προσθέσετε στο commit Μπορεί να γίνει πολλές φορές πρίν από τη τελική προσθήκη Εντολή: git add <filename> Τα αρχεία μπορεί να είναι και σε υποκατάλογο 14

Προσθήκη σε στιγμιότυπο 2 Για απλούστευση κάντε και τα δύο βήματα μαζί, όταν θέλετε να κρατήσετε στιγμιότυπο: git add <filenames> git commit Η εντολή git commit ξεκινά έναν editor ώστε να γράψετε ένα σύντομο κείμενο που εξηγεί τι περιλαμβάνει το commit εναλλακτικά: git commit - m το μήνυμα Τα κείμενα αυτά είναι σημαντικά πρέπει να μπορεί κανείς να καταλαβαίνει τι κάνατε (και γιατί) φανταστείτε ότι το γράφετε για κάποιον άλλο 15

Προβολή των διαφορών Εντολή git diff δείχνει διαφορές πολύ χρήσιμη σε συνδιασμό με την git status git diff αλλαγές μεταξύ staged (μετά από git add) και working directory git diff - - cached αλλαγές μεταξύ τρέχοντος στιγμιότυπου (HEAD) και staged git diff HEAD αλλαγές μεταξύ τρέχοντος στιγμιότυπου και working directory 16

Παράδειγμα Το working dir είναι ίδιο με το τελευταίο στιγμιότυπο (HEAD) Αλλάζω το αρχείο aris git status git add aris # πρόσθεσε το aris στο staging area git status git diff - - cached # αλλαγές μεταξύ στιγμιοτύπου και staged ξανα- αλλάζω το aris git status git diff # αλλαγές μεταξύ staged και working dir git diff HEAD # αλλαγές μεταξύ στιγμιότυπου και working dir git commit - m message git status git diff # καμία αλλαγή Το staging area είναι άδειο git diff HEAD # αλλαγές μεταξύ στιγμιότυπου και working dir 17

Απομακρυσμένο αποθετήριο Θυμηθείτε: το τοπικό αποθετήριο κλωνοποίηθηκε από ένα αποθετήριο του GitHub το αποθετήριο του GitHub ονομάζεται απομακρυσμένο, remote Το remote repo έχει όνομα Συνηθισμένο όνομα: origin Εντολή git remote αναφέρει το όνομα του remote repo git remote -v δίνει περισσότερες πληροφορίες Για παράδοση ασκήσεων ενημερώνετε το αποκρυσμένο αποθετήριο με τις αλλαγές που έγιναν στο τοπικό η πράξη λέγεται προώθηση push 18

Προώθηση Το remote ενημερώνεται για όλα τα νέα στιγμιότυπα που δημιουργήθηκαν από την προηγούμενη ενημέρωση Προσοχή: αν στο working directory υπάρχουν αλλαγές σε αρχεία, αυτές δεν προωθούνται μόνο commits προωθούνται Εντολή Την πρώτη φορά: git push -u origin master ώστε μετά το git push να αρκεί Το origin είναι το όνομα του remote Το master είναι το όνομα του παρακλαδιού που θέλετε να προωθήσετε. Το master είναι το «κύριο» παρακλάδι. Αναφέρεται και ως trunk (κορμός) σε διάφορα κείμενα 19

Σύνοψη: git για το μάθημα Στην αρχή (για κάθε τοπικό αποθετήριο): βλ εξήγηση git clone <private_repo_url> παρακάτω Για κάθε καινούρια άσκηση τα ελάχιστα βήματα είναι: git remote add labxx_starter <lab_starter_url> git fetch labxx_starter git merge labxx_starter/master -m Fetched labxx init files θα δημιουργηθει ο κατάλογος labxx Κάνετε αλλαγές αρχείων σχετικών με την άσκηση λύση της άσκησης git add <αρχεία που τροποποιήθηκαν, προστέθηκαν> git commit -m μήνυμα git push origin master ή git push, αν έχετε κάνει git push - u origin master την πρώτη φορά 20

Πιθανά σενάρια Σ1: Δουλεύοντας με 2 τοπικά αποθετήρια π.χ. και στο εργαστήριο και στο σπίτι Σ2: Αναίρεση αλλαγών αν κάτι πάει στραβά, πώς επαναφέρουμε ένα παλιότερο στιγμιότυπο Σ3: Αλλαγή ονόματος, διαγραφή αρχείου 21

Σ1: Δύο τοπικά αποθετήρια Π.χ. στο εργαστήριο και στο σπίτι Δημιουργία 2 κλώνων Στο εργαστήριο, την πρώτη φορά git clone, add, commit, push ώστε όλες οι αλλαγές να προωθηθούν στο GitHub Στο σπίτι (υποθέτω υπάρχει ήδη κλώνος) git pull ώστε οι αλλαγές να «έρθουν» τοπικά στο τέλος: git add, commit, push Μετά, πάντα ξεκινάτε με git pull 22

Σ1: Πιθανά προβλήματα Αν ξεχάσετε να κάνετε push τις τελευταίες αλλαγές πριν φύγετε από το σπίτι δεν υπάρχει τρόπος να τις πάρετε (εκτός αν μπορείτε να στήσετε ένα git server στο σπίτι,...) Αν ξεχάσετε να κάνετε pull ώστε να έχετε την πιο πρόσφατη έκδοση και κάνετε commit ένα push θα αποτύχει γιατί το απομακρυσμένο αποθετήριο έχει αλλαγές που δεν έχετε τοπικά πρέπει πρώτα να φέρετε και να συγχωνέψετε(merge) τις αλλαγές αν δεν κάνατε commit, το pull θα αποτύχει και θα σας ζητηθεί να κάνετε commit και μετά merge, όπως παραπάνω 23

Σ1: Συνδιασμός αλλαγών Eντολή git pull προσπαθεί να συνδιάσει τις αλλαγές αυτόματα, προσθήκες νέων αρχείων δεν δημιουργούν προβλήματα αλλά συχνά αποτυχαίνει αλλαγές στο ίδιο αρχείο απαιτούν την παρέμβαση του χρήστη Τα προβλήματα ονομάζονται conflicts Θα δείτε ποιά αρχεία έχουν conflicts στην απάντηση της pull Επίλυση συγκρούσεων (συγχώνευση) ανοίξτε τα αρχεία με ένα editor και θα δείτε τις αλλαγές διορθώστε το πρόβλημα με το χέρι, σε όλα τα αρχεία δημιουργείστε ένα νέο στιγμιότυπο με τις αλλαγές git add, commit προώθηση στο GitHub με git push 24

Σ1: Παράδειγμα Το working dir είναι ίδιο με το τελευταίο στιγμιότυπο στο GitHub αλλάζω τοπικά το αρχείο test git add test git commit - m "local changes Στο GitHub με ένα browser αλλάζω το αρχείο test git pull # αποτυγχάνει, conflict στο test git status vi test # φαίνονται οι διαφορές, τις συνθέτω git add test git status git commit - m "message" git push Στο GitHub το αρχείο test άλλαξε και στο graphs φαίνεται τι έγινε 25

remote add, fetch, merge Στη σύνοψη git για το μάθημα, είδαμε 3 περίεργες εντολές git: 1. git remote add labxx_starter <lab_starter_url> 2. git fetch labxx_starter 3. git merge labxx_starter/master m Fetched labxx init files 1. Προσθήκη απομακρ. αποθετηρίου με όνομα labxx_starter μπορούμε να έχουμε πολλά remotes... 2. Προσκόμηση του τελευταίου στιγμιότυπου του labxx_starter δεν γίνονται όμως αλλαγές στα αρχεία του working directory 3. Συγχώνευση του remote με το working directory θεωρητικά μπορεί να υπάρξουν συγκρούσεις στο μάθημα, πάντα χωριστός κατάλογος 26

Σ2: αναίρεση αλλαγών Πολλοί διαφορετικοί τρόποι ανάλογα με την κατάσταση και το τρόπο εργασίας/προτίμηση Περιπτώσεις 1. 2. 3. 4. πριν τη προσωρινή προσθήκη (πριν κάνετε git add) μετά τη προσωρινή αλλά πριν τη τελική προσθήκη (πριν git commit) μετά τη τελική προσθήκη (μετά το git commit) αλλά πριν τη προώθηση σε απομακρυσμένο αποθετήριο μετά και από τη προώθηση σε απομακρυσμένο αποθετήριο Σημείωση: Αναίρεση δεν σημαίνει ότι η ώρα προσπέλασης αρχείων θα επανέλθει. Τα περιεχόμενα μόνο αλλάζουν. 27

Π1: πρίν το git add Βεβαιωθείτε ότι πράγματι δεν έχετε κάνει git add git status δεν θα πρέπει να έχει Changes to be commi?ed Δώστε την εντολή git checkout <όνομα αρχείου> η εντολή φέρνει από το τρέχον στιγμιότυπο το αρχείο και το γράφει στο working directory 28

Π2: πριν το git commit Βεβαιωθείτε για την κατάσταση του αποθετηρίου git status Εντολές αναίρεσης: 1. git reset αφαιρεί από το staging area όλες τις αλλαγές από το τελευταίο στιγμιότυπο (αναιρεί τα προηγούμενα git add) Αλλά το working directory δεν αλλάζει 2. git checkout <ονόματα αρχείων> «Φέρνει» τα αρχεία, όπως ήταν στο προηγούμενο στιγμιότυπο, στο working directory 29

Π3: μετά το commit, πριν push Για αναίρεση του τελευταίου commit: git reset - - hard HEAD~1 οι αλλαγές στο working dir χάνονται και όλα τα άρχεια επανέρχονται όπως ήταν στο στιγμιότυπο. Το HEAD~1 σημαίνει ένα commit πριν θα μπορούσαμε να έχουμε ~2 κλπ. μπορούμε επίσης να αναφερθούμε σε ένα commit με το hash του Δεν είναι καλή ιδέα για κώδικα που έχουμε κάνει push σε απομακρυσμένο αποθετήριο και είναι ορατός από άλλους γιατί τους μπερδεύει 30

Π4: μετά το push Στιγμιότυπα που έγιναν push σε απομακρυσμένο αποθετήριο έχουν γίνει ορατά και χρησιμοποιηθεί (pull) από άλλους αν ξαναγυρίσουμε σε παλιότερο στιγμιότυπο, οι άλλοι χρήστες θα μπερδευτούν Καλύτερα να δημιουργηθεί ένα νέο στιγμιότυπο που στην ουσία αναιρεί τις αλλαγές Εντολή git revert HEAD ξεκινάει editor με ένα έτοιμο μήνυμα. Μπορείτε να το αλλάξετε το working dir επανέρχεται στην κατάσταση του στιγμιοτύπου για αναίρεση πιο πίσω, HEAD~1 κλπ. Μετά, git push ώστε η αλλαγή να περάσει στο απομακρυσμένο αποθετήριο 31

Σ3: μετονομασία, διαγραφή Διαγραφή αρχείου διαγράφεται από το working directory, αλλά όχι από το στιγμιότυπο διαγραφή και από το working directory και από το (επόμενο) στιγμιότυπο: git rm <file_name> Μετονομασία/μετακίνηση αρχείου παρόμοια προβληματα με τη διαγραφή εντολή git mv 32

Πιο προχωρημένη χρήση Παρακλάδια (branches) Δημιουργία νέου branch Αλλαγή τρέχοντος branch Συγχώνευση παρακλαδιών Ενημέρωση remote για τα παρακλάδια 33

Γιατί παρακλάδια Συχνές δοκιμές κατά την ανάπτυξη κώδικα πώς θα οργανωθεί αυτό καλα; Ολα τα version control systems υποστηρίζουν παρακλάδια το git φημίζεται ότι το κάνει πολύ εύκολα 34

Δημιουργία Εντολή: git checkout -b <branch_name> Δημιουργεί το παρακλάδι και αλλάζει το τρέχον παρακλάδι σε αυτό (στο καινούριο) Η εντολή git status στην πρώτη γραμμή αναφέρει σε ποιό παρακλάδι βρισκόμαστε κάθε στιγμή 35

Αλλαγή τρέχοντος branch Για να δούμε ποιά παρακλάδια υπάρχουν: εντολή: git branch Αλλαγή τρέχοντος branch Eντολή: git checkout <branch_name> Αλλαγμένα αρχεία στο working directory, δεν χάνονται αλλά προσοχή βλ. διαφάνεια 27 36

Συγχώνευση παρακλαδιών Οπως συγχωνεύσαμε τοπικό με απομακρυσμένο αποθετήριο (merge, pull), έτσι γίνεται και σε branches Στο τρέχον παρακλαδι, έστω master, μπορούμε να συγχωνεύσουμε τις αλλαγές που έκανε το παρακλάδι testbrach git merge testbranch Φυσικά μπορεί να υπάρξουν συγκρούσεις που πρέπει να λυθούν Προσοχή: έχει σημασία ποιό παρακλάδι συγχωνεύεται σε ποιό το master στο testbranch ή το testbranch στο master? και τα δύο έχουν νόημα για διαφορετικούς λόγους 37

Ενημέρωση remote για branches Συνήθως τα παρακλάδια είναι για «προσωπική χρήση» δοκιμάζει κανείς παραλλαγές στο τοπικό του αποθετήριο πετάει ό,τι δεν δουλεύει και τις χρήσιμες αλλαγές τις συγχωνεύει με το κύριο παρακλάδι (master) μετά στέλνει τις «τελικές» αλλαγές (του master) στο απομακρυσμένο αποθετήριο Αν στα παρακλάδια δουλεύουν και άλλοι πρέπει να φαίνονται στο απομακρυσμένο αποθετήριο εντολή: git push <remote> <branch> 38

Σύνοψη git, GitHub Τί είναι; γιατί στο μάθημα αυτό; Βασικές έννοιες στιγμιότυπο, αποθετήριο, κατάλογος εργασίας κλωνοποίηση, προώθηση, ενσωμάτοση αλλαγών Βασικές εντολές Workflow για τις ασκήσεις Πιθανά σενάρια/προβλήματα Παρακλάδια 39

Επόμενο μάθημα MIPS assembly απλές εντολές με καταχωρητές και εντολές προσπέλασης μνήμης 40

Τέλος Ενότητας

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.

Σημειώματα

Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1307.

Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου. «Αρχιτεκτονική Υπολογιστών. Οδηγίες GitHub». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1307.

Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.