Εισαγωγή στα SCM εργαλεία και στο Subversion Παπαδημητρίου Λάμπρος OSS Event #2 Τμήμα Πληροφορικής/Πανεπιστήμιο Πειραιά 30 Νοεμβρίου, 2007
Περιεχόμενα Προβλήματα σε projects Συνεργασία Διαχείριση εκδόσεων Οργάνωση SCM εργαλεία Εισαγωγή Μοντέλα Λειτουργίας SCM Έννοιες Βασικές Εργασίες
Περιεχόμενα Subversion Εισαγωγή Χαρακτηριστικά Βασικός κύκλος εργασιών Συνοψίζοντας Μια ματιά στο Trac
Προβλήματα - Συνεργασία ρε, πείραξα την κλάση Χ για να παίζει ο web client ΩΧ! την άλλαξα από τότε που την πήρες Ποια Χ; Γιατί δεν την ξέρω εγώ! Αδύνατο να συγχρονιστούν οι προγραμματιστές σε ένα αντικείμενο. Αποκλείεται να γράφεις ξεχωριστό κομμάτι κώδικα χωρίς να συνδέεται κάπου Κάθε ένας γράφει κώδικα σε διαφορετική έκδοση και δημιουργεί διαφορετικές πάλι Ο συντονισμός των παραπάνω είναι ανυπόφορος
Διαχείριση Εκδόσεων αναπόφευκτό να μην πειραματιστείς στην ανάπτυξη λογισμικού Τα λάθη ανθρώπινα (εκδόσεις;) Τα backups τελικά δεν είναι λύση! Κάπου θα λησμονήσεις κάτι που έσβησες πριν από καιρό... Σίγουρα η αναίρεση του IDE δεν θα σου φτάνει...
Οργάνωση Καταντάει βαρετό να απαντάς στον καθένα για ένα πρόβλημα που ήδη κοιτάς. Κανείς δεν καταλαβαίνει πλήρως την συνολική πρόοδο του έργου (αλλαγές;) Κανείς δεν είναι πλήρως ενημερωμένος για το έργο (χρήστες/προγραματιστές/συ ντονιστής) Το έργο καταντάει... δυο λαλούν και τρεις χορεύουν
CSM εργαλεία - Εισαγωγή Τα Source Code Management (SCM) εργαλεία παρέχουν τις παρακάτω λειτουργίες: Διαχειρίζονται αρχεία και καταλόγους Καταγράφουν τις αλλαγές που κάνεις Κρατάνε ιστορικό των αλλαγών που έχουν γίνει SCM εργαλεία ανοιχτού λογισμικού: RCS, CVS, Subversion Arc, Monotone, Bazaar, Mercurial, Git Εύρος επιλογών σε plugins και GUI εφαρμογές
Μοντέλα λειτουργίας SCM Κλείδωμα αρχείων (File locking) Συγχώνευση εκδόσεων (Version merge) Κεντρικοποιημένος / Κατανεμημένος έλεγχος εκδόσεων.
Έννοιες Branch: Σύνολο αρχείων που ακολουθούν διαφορετική γραμμή ανάπτυξης. Πχ, διαφορετικές εκδόσεις του έργου (stable, unstable) Tag: Αναφέρεται σε ένα σημαντικό στιγμιότυπο του έργου (π.χ. stable release 1.0) Trunk: Η βασική γραμμή ανάπτυξης του έργου (τελευταία πρόοδος) Working copy: Το αντίγραφο που έχουμε εμείς από το σύστημα και δουλεύουμε Repository: εκεί που αποθηκεύονται τα αρχεία και το ιστορικό τους.
Βασικές εργασίες check-out: δημιουργεί ένα τοπικό working copy από το repository. commit: μεταφέρουμε τις αλλαγές που έγιναν στο working copy στο repository import: μεταφέρουμε τα τοπικά αρχεία στο repository για πρώτη φορά update: Ανανέωση του working copy με τις αλλαγές που βρίσκονται στο repository export: μεταφέρει τα αρχεία από το repository στον τοπικό δίσκο (δεν φτιάχνει working copy) conflict: Συμβαίνει όταν δύο αλλαγές από διαφορετικές ομάδες γίνονται στο ίδιο μέρος
Subversion - Εισαγωγή Σκοπός του subversion: Αντικατάσταση CVS :) Μοιάζει στον τρόπο λειτουργίας, αλλα ΔΙΑΦΕΡΕΙ Ευρέως γνωστό στον χώρο των SCM GCC, Mono, Apache, Python, KDE,... Πληθώρα plugins, GUI εφαρμογών ksvn, esvn, rapidsvn, tortoisesvn,... Kdevelop, Eclipse, NetBeans, [JDeveloper, VirtualSVN] Απλό & σταθερό Υψηλό επίπεδο υποστήριξης
Βασικά Χαρακτηριστικά #1 Ατομικά commits Κατάλογοι & μεταδεδομένα περνάνε σε εκδόσεις Πραγματικό ιστορικό εκδόσεων Έξυπνα braches και tags Τοπικοποίηση Hackability
Βασικά Χαρακτηριστικά #2 Επιλογές σε επίπεδα δικτύου Apache HTTP Server + mod_dav_svn αυθεντικοποίηση και path-based εξουσιοδότηση SSL (ασφάλεια) HEAD browsing, απλό webdav svnserve ελαφρύ και απέριττο ασφαλές μέσω SSH Σταθερός χειρισμός δεδομένων (binary & text) Σταθερός αλγόριθμος για δυαδικές διαφορές
Βασικός Κύκλος Εργασιών #1 1.checkout σε ένα working copy $ svn checkout http://biftekoupoli/svn/test/ $ cd trunk 2.update $ svn update 3.Κάνουμε τις αλλαγές μας $ svn delete simplelib.c $ vim test.c 4.Ελέγχουμε τις αλλαγές μας $ svn status / svn diff TODO
Βασικός Κύκλος Εργασιών #2 5.Αν χρειάζεται αναιρούμε τις αλλαγές μας $ svn revert 6.Διορθώνουμε conflicts (προσθέτουμε αλλαγές άλλων) $ svn update $ vim test.c $ svn resolved test.c 7.Υποβάλλουμε και εμείς τις αλλαγές μας $ svn commit -m Added help function
Συνοψίζοντας Για να φτιάξετε repository χρειάζεται τα εξής: svnadmin create /home/username/repository/ svn import myproject file:///home/username/repository/ Επόμενες εκδόσεις Subversion: 1.5 2.0 Περισσότερες πληροφορίες http://subversion.tigris.org/ http://svnbook.red-bean.org/
Μια ματιά στο Trac Παρακολουθεί SCM Ωραίο GUI Επιπλέον εργαλεία: Wiki Roadmap Tickets RSS feeds Search
ΤΕΛΟΣ! ΕΡΩΤΗΣΕΙΣ;