Επίλυση συγκρούσεων
Πότε παρουσιάζεται μία σύγκρουση
Μία σύγκρουση μπορεί να παρουσιαστεί όταν κάνουμε update, έχοντας κάνει αλλαγές τοπικά σε κάποιο αρχείο, ενώ την ίδια στιγμή το αρχείο αυτό έχει αλλάξει και στο repository του SVN από το scripty του KDE. Σε αυτήν την περίπτωση η εφαρμογή svn προσπαθεί να κάνει συγχώνευση (merge) των δύο αρχείων και να αποθηκεύσει το αρχείο που προκείπτει. Αν όμως η προσπάθεια συγχώνευσης αποτύχει έχουμε σύγκρουση (conflict).
Εμφάνιση σύγκρουσης
Έστω λοιπόν ότι κάνουμε update και παίρνουμε το μήνυμα:
$ svn update
C desktop_koffice.po
U kfile_koffice.po
G kspread.po
U thesaurus_tool.po
C kexi.po
$
Η εφαρμογή svn μας αναφέρει ποια αρχεία έχουν αλλάξει και τι αλλαγές
έχουν γίνει σε αυτά, με τη χρήση ενός κωδικού (U,G,C).
Οι κωδικοί που είναι δυνατό να ληφθούν από την παραπάνω διαδικασία
είναι:
Α | Το αρχείο προστέθηκε (added) στο KDE SVN στο διάστημα που μεσολάβησε από την τελευταία ενημέρωση του τοπικού αντιγράφου |
D | Το αρχείο διαγράφηκε (deleted) στο KDE SVN στο διάστημα που μεσολάβησε από την τελευταία ενημέρωση του τοπικού αντιγράφου |
U | Το αρχείο ενημερώθηκε (updated) χωρίς πρόβλημα με τις αλλαγές που έγιναν στο repository |
G | Το αρχείο είχε αλλαχθεί και στο τοπικό αντίγραφο του repository και στο repository. H εφαρμογή svn έκανε συγχώνευση (merge) των δύο αρχείων με επιτυχία |
C | Το αρχείο είχε αλλαχθεί και στο τοπικό αντίγραφο του repository και στο repository. Δεν ήταν δυνατή η συγχώνευση των δύο αρχείων με επιτυχία. Παρουσιάστηκε σύγκρουση (conflict) |
Όπως βλέπουμε από το παραπάνω μήνυμα της εντολής svn update, υπάρχει σύγκρουση στα αρχεία desktop_koffice.po και kexi.po. Αυτός είναι ο τρόπος με τον οποίο η εφαρμογή svn μας δηλώνει την ύπαρξη μιας σύγκρουσης. Όμως η διαδικασία δεν τελειώνει εδώ. Η εφαρμογή svn δημιουργεί τα ακόλουθα αρχεία (πχ. για το αρχείο desktop_koffice.po)
desktop_koffice.po | Το αποτέλεσμα της συγχώνευσης των δύο αρχείων, όπου υπάρχει η σύγκρουση. Στο αρχείο έχουν προστεθεί δείκτες σύγκρουσης (conflict markers) που σημειώνουν τα "άκρα" της σύγκρουσης |
desktop_koffice.po.mine | Το αρχείο αυτό είναι το αρχείο που υπήρχε στο τοπικό αντίγραφο του repository, πριν το update. Περιέχει τις αλλαγές που είχατε κάνει και τίποτα άλλο. |
desktop_koffice.po.rOLDREV | Αυτό είναι το τελευταίο BASE revision που είχατε κάνει update. Είναι δηλαδή το τελευταίο αρχείο που λάβατε από το SVN repository με επιτυχία. Πχ. desktop_koffice.por410351 |
desktop_koffice.po.rNEWREV | Αυτό είναι το αρχείο που η εφαρμογή svn έλαβε από το repository. Είναι δηλαδή το HEAD revision του repository. Πχ. desktop_koffice.po.r411071 |
Η δημιουργία αυτών των αρχείων σκοπό έχει να μας βοηθήσει στην επίλυση της σύγκρουσης που θα πρέπει να γίνει με το χέρι.
Επίλυση σύγκρουσης
Για να επιλύσουμε τη σύγκρουση ανοίγουμε το αρχείο po (πχ. desktop_koffice.po) με έναν επεξεργαστή κειμένου (πχ. kwrite) και βρίσκουμε την πρώτη σύγκρουση. Παρακάτω παρατίθεται ένα τμήμα του αρχείου desktop_koffice.po. Σε αυτό φαίνονται οι δείκτες σύγκρουσης (conflict markers) καθώς και το κείμενο από τα αρχεία .mine (με πράσινο χρώμα) και .r411071 (με καφέ χρώμα).
#:
../../koffice/kivio/templates/basic/basicflow.desktop:6
msgid "Name=Basic Flowcharting"
msgstr "Name=Βασικό διάγραμμα ροής"
<<<<<<<
.mine
#:
../../koffice/kivio/templates/basic/basicflow.desktop:36
msgid "Comment=Creates a document with the basic
stencils for flowcharting loaded."
=======
#:
../../koffice/kivio/templates/basic/basicflow.desktop:37
msgid "Comment=Creates a document with the basic
stencils for flowcharting loaded."
>>>>>>>
.r411071
msgstr ""
"Comment=Δημιουργεί ένα έγγραφο με τις "
"βασικές μήτρες για διάγραμμα ροής "
"φορτωμένες."
Αφού αφαιρέσουμε το τμήμα του κειμένου που είναι λανθασμένο/ξεπερασμένο και τους δείκτες σύγκρουσης, συνεχίζουμε με τον ίδιο τρόπο μέχρι να επιλύσουμε όλες τις συγκρούσεις. Ένας τρόπος επίλυσης της παραπάνω σύγκρουσης φαίνεται παρακάτω.
#:
../../koffice/kivio/templates/basic/basicflow.desktop:6
msgid "Name=Basic Flowcharting"
msgstr "Name=Βασικό διάγραμμα ροής"
#:
../../koffice/kivio/templates/basic/basicflow.desktop:37
msgid "Comment=Creates a document with the basic
stencils for flowcharting loaded."
msgstr ""
"Comment=Δημιουργεί ένα έγγραφο με τις "
"βασικές μήτρες για διάγραμμα ροής "
"φορτωμένες."
Ανά πάσα στιγμή μπορούμε να ελέγξουμε την κατάσταση του αρχείου με
την εντολή:
msgfmt desktop_koffice.po -o /dev/null
Όταν έχουμε τελειώσει με όλες τις συγκρούσεις που υπάρχουν στο αρχείο
(η παραπάνω εντολή δεν εμφανίζει κάποιο μήνυμα σφάλματος), πληροφορούμε
το SVN ότι η σύγκρουση επιλύθηκε, με την εντολή:
svn resolved desktop_koffice.po
Όταν το τοπικό αντίγραφο του SVN λάβει την παραπάνω εντολή, θα σημειώσει ότι η σύγκρουση για το αρχείο desktop_koffice.po έχει αρθεί και θα σβήσει τα αρχεία desktop_koffice.po.mine, desktop_koffice.por410351 και desktop_koffice.po.r411071 από το φάκελο.