Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
Version Control Systems: Git
Αλέξανδρος Χατζηγεωργίου, University of Macedonia, 2014
2
Version Control System
Ένα Version Control System (VCS) – ή “revision control system” (σύστημα ελέγχου εκδόσεων) είναι λογισμικό που επιτρέπει τη διαχείριση και παρακολούθηση των αλλαγών που συμβαίνουν σε οποιοδήποτε έγγραφο ενός έργου κατά τη διάρκεια της αρχικής του ανάπτυξης είτε κατά τη διάρκεια της συντήρησής του
3
Version Control System
Οφέλη από τη χρήση VCS: - Backup Οργάνωση αρχείων που έχουν δημιουργηθεί σε διαφορετικές χρονικές στιγμές (χωρίς συμβάσεις για ονοματοδοσία φακέλων βάσει ημερομηνίας) θα μπορούσα να κάνω “Save As..” σε διαφορετικό φάκελο κάθε φορά, να συμπιέζω για να κερδίσω χώρο….χρονοβόρο και κουραστικό Ανάκτηση προηγούμενων εκδόσεων και σύγκριση μεταξύ εκδόσεων (εξοικονόμηση χώρου εγγυημένη..) αν έχω μια συλλογή αρχείων που αποτελούν ένα έργο (πηγαίος κώδικας, βιβλιοθήκες, εικόνες κλπ) θα πρέπει να αρχειοθετώ ένα ολόκληρο directory κάθε φορά…..!
4
Version Control System
Οφέλη από τη χρήση VCS: Διατήρηση log για τις αλλαγές που έχουν γίνει εναλλακτικά θα έπρεπε να έχω ένα αρχείο στο οποίο να καταγράφω στοιχεία για κάθε αλλαγή που γίνεται Δυνατότητα εργασίας πολλών ατόμων επί του ιδίου έργου, ανεξαρτήτως της γεωγραφικής τους θέσης ή χρονικής στιγμής (Collaborative Software Development) εναλλακτικά θα έπρεπε να αποθηκεύω σε κοινόχρηστο φάκελο (e.g. Dropbox) ενημερώνοντας τους συναδέλφους για το πότε μπορούν να δουλέψουν επί ενός αρχείου, αλλιώς θα είχαμε συγκρούσεις και corrupted εκδόσεις
5
Version Control System
In a VCS: Files cannot be overwritten There is a common repository that holds all the latest files Allows you to revert back to an older version of the file/project if needed Allows you to inspect differences (diff) between versions
6
Version Control System
Benefit from using VCS: Resolution of Conflicts Suppose Alice modifies class A, and Bob modifies class B. They both upload their changes. Most systems will automatically deduce a reasonable course of action: accept and merge their changes, so both Alice’s and Bob’s edits are applied.
7
Version Control System
Now suppose both Alice and Bob have made distinct edits to the same line. Then it is impossible to proceed without human intervention. conflict
8
Version Control System
The second person to upload is informed of a merge conflict, and must choose one edit over another, or revise the line entirely. More complex situations can arise. Version control systems handle the simpler cases themselves, and leave the difficult cases for humans. edits
9
Git Το Git είναι ένα Κατανεμημένο Σύστημα Ελέγχου Εκδόσεων (distributed version control system DVCS) που σημαίνει ότι επιτρέπει την παράλληλη εργασία πολλαπλών ατόμων σε ένα έργο ακόμα και χωρίς την ύπαρξη σύνδεσης σε κεντρικό δίκτυο. Η εργασία τους μπορεί να καταχωρηθεί (push) στο έργο όταν είναι έτοιμη.
10
Centralized vs. Distributed
each action has to pass through the network — leaving a developer unable to work if they happen to have no network connection
11
Centralized vs. Distributed
In distributed systems, each developer has his own full-fledged repository on his computer. In most set-ups there’s an additional central repository on a server that’s used for sharing. However, this is not a requirement; every developer can perform all important actions in his local repository: committing changes, viewing differences between revisions, switching branches, etc
12
Git vs. other VCSs Τα περισσότερα VCS (CVS, Subversion, Bazaar κλπ) αποθηκεύουν την πληροφορία για την κατάσταση ενός συστήματος ως μια λίστα από αλλαγές σε επίπεδο αρχείων
13
Git vs. other VCSs Το Git αντιλαμβάνεται τα δεδομένα ως στιγμιότυπα ενός mini filesystem: Κάθε φορά που πραγματοποιείται ένα commit το Git λαμβάνει μια εικόνα του πως «φαίνονται» όλα τα αρχεία του συστήματος και κρατά μια αναφορά προς αυτή την εικόνα (για αρχεία που δεν αλλάζουν αποθηκεύεται μια αναφορά προς ένα προηγούμενο αρχείο)
14
Δημοφιλία Git GitHub is the largest code host on the planet with over 14 million repositories. Google Trends (07/07/2014) (blue: Git, red: svn)
15
Git Operations (local)
16
Git Operations (with remote)
17
Git Workflow Για την εξέλιξη του λογισμικού επί της βασικής γραμμής, τα μέλη της ομάδας ανάπτυξης ανακαλούν αρχεία από τη βασική γραμμή, τα επεξεργάζονται στον ιδιωτικό τους χώρο εργασίας και τα υποβάλλουν εν συνεχεία στη βασική γραμμή, σχηματίζοντας μια νέα αναθεώρηση (revision) του κώδικα. Ορισμένες από τις αναθεωρήσεις ενδέχεται να σηματοδοτούν συγκεκριμένες εκδόσεις (release) του προϊόντος. Σε πολλές περιπτώσεις οι συνεισφορές των προγραμματιστών εισάγονται σε κλάδο παράλληλο της βασικής γραμμής (development)
18
Git Workflow - Branching
Σε περίπτωση που η ομάδα ανάπτυξης επιθυμεί να εργαστεί επί του συστήματος για τη διόρθωση σφαλμάτων, χωρίς όμως να θέσει σε κίνδυνο την ορθή λειτουργία του συστήματος της βασικής γραμμής, έχει τη δυνατότητα να δημιουργήσει μια διακλάδωση (branch) επί της βασικής γραμμής. Οι τροποποιήσεις του κώδικα (υποβολές) επί της διακλάδωσης δημιουργούν αναθεωρήσεις που δεν επηρεάζουν τη βασική γραμμή. Όταν κάποια στιγμή οι προγραμματιστές βεβαιωθούν για την ορθή επίλυση όλων των σφαλμάτων μπορούν να πραγματοποιήσουν μια συγχώνευση (merging) με τη βασική γραμμή (ή και άλλο κλάδο εφόσον το επιθυμούν), με σκοπό οι τροποποιήσεις της διακλάδωσης να συνενωθούν με τον κώδικα της βασικής γραμμής (ο οποίος στο ενδιάμεσο μπορεί να έχει εξελιχθεί).
19
Git Workflow Subversion-Style Workflow
A centralized workflow is very common, especially from people transitioning from a centralized system. Git will not allow you to push if someone has pushed since the last time you fetched, so a centralized model where all developers push to the same server works just fine.
20
Git Workflow Integration Manager: single person who commits to the “blessed” repository
21
Git Workflow Dictator and Lieutenants Workflow
For more massive projects, a development workflow like that of the Linux kernel is often effective. In this model, some people ('lieutenants') are in charge of a specific subsystem of the project and they merge in all changes related to that subsystem. Another integrator (the 'dictator') can pull changes from only his/her lieutenants and then push to the 'blessed' repository that everyone then clones from again.
22
Prerequisites Install EGit (http://download.eclipse.org/egit/updates)
Create a project in a remote repository (e.g. GitHub) Put project under version control
23
Basic Usage Για οτιδήποτε αποθηκεύεται στο Git υπολογίζεται ένα άθροισμα ελέγχου (checksum) μέσω SHA-1 hash κωδικού 40 χαρακτήρων
24
Basic Usage
25
Basic Usage
26
Basic Usage
27
Basic Usage
28
Git internally…
29
Git internally…
30
Git internally…
31
Git internally…
32
Branching Έστω ότι εργαζόμαστε σε ένα έργο και έχουμε ήδη πραγματοποιήσει ορισμένα commit
33
Branching Αποφασίζουμε να εργαστούμε επάνω στο πρόβλημα #53 και για το λόγο αυτό θέλουμε να δημιουργήσουμε ένα καινούργιο κλάδο (branch) στον οποίο να επιλύσουμε το πρόβλημα
34
Branching Αφού κάνουμε ορισμένες αλλαγές (σχετικά με το πρόβλημα) πραγματοποιούμε ένα commit. Η ενέργεια αυτή «προχωρά» τον κλάδο iss53 προς τα εμπρός.
35
Branching Στην πορεία γίνεται γνωστό ότι κάτι πρέπει να διορθωθεί άμεσα στο λογισμικό που υπήρχε. Επειδή οι αλλαγές στο πρόβλημα #53 δεν έχουν ολοκληρωθεί επιστρέφουμε στον κλάδο «master». Στο σημείο αυτό, η δομή του working directory είναι ως είχε
36
Branching Λύνουμε το υπάρχον πρόβλημα και καταχωρούμε τις αλλαγές πραγματοποιώντας ένα νέο commit προωθώντας το master προς τα εμπρός. master
37
Branching Επιστρέφουμε (‘switch to’) στον κλάδο “iss53”.
Πραγματοποιούμε τις αλλαγές και εκτελούμε commit
38
Branching Θεωρώντας ότι το πρόβλημα #53 επιλύθηκε, αποφασίζεται η συγχώνευση της λύσης στον κλάδο “master” Η συγχώνευση είναι σχετικά πολύπλοκη (three-way merge)
39
Branching Αν δεν υπάρχουν συγκρούσεις η συγχώνευση πραγματοποιείται αυτόματα καταλήγοντας στην ακόλουθη εικόνα του συστήματος:
40
Branching Συγκρούσεις εμφανίζονται αν το ίδιο τμήμα κώδικα έχει τροποποιηθεί από διαφορετικούς προγραμματιστές. Ο προγραμματιστής είναι υπεύθυνος για την επίλυση της σύγκρουσης πραγματοποιώντας προσθήκη (“add”) του σχετικού αρχείου στο index για να δηλώσει την ολοκλήρωση της συγχώνευσης of the merging
41
Συγγραφή καλών commit messages
Ένα commit message θα πρέπει να περιλαμβάνει ένα header και ένα body (διαχωρίζονται με κενή γραμμή) Header < 50 characters Body: should wrap text at 72 Μήνυμα σε ενεστώτα. Περιγράφεται ο λόγος για τον οποίο έγινε η αλλαγή (οι αλλαγές στον κώδικα φαίνονται με την βοήθεια του Git) Δυνατή η χρήση footer, π.χ. Fixes: bug #8089
42
Συγγραφή καλών commit messages
Την επιτάχυνση της εξέτασης του κώδικα Την υποβοήθηση της συγγραφής release notes Την υποβοήθηση μελλοντικών συντηρητών του λογισμικού
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.