SVN - Rozwiązywanie konfliktów
Tomek decyduje się dodać plik README do swojego projektu. Tworzy więc plik README i dodaje do niego listę TODO. Po dodaniu tego repozytorium plików jest w wersji 6.
[tom@CentOS trunk]$ cat README
/* TODO: Add contents in README file */
[tom@CentOS trunk]$ svn status
? README
[tom@CentOS trunk]$ svn add README
A README
[tom@CentOS trunk]$ svn commit -m "Added README file. Will update it's content in future."
Adding trunk/README
Transmitting file data .
Committed revision 6.
Jerry sprawdza najnowszy kod, który jest w wersji 6. I natychmiast zaczyna działać. Po kilku godzinach Tomek aktualizuje plik README i zatwierdza zmiany. Zmodyfikowany plik README będzie wyglądał następująco.
[tom@CentOS trunk]$ cat README
* Supported operations:
1) Accept input
2) Display array elements
[tom@CentOS trunk]$ svn status
M README
[tom@CentOS trunk]$ svn commit -m "Added supported operation in README"
Sending trunk/README
Transmitting file data .
Committed revision 7.
Teraz repozytorium jest w wersji 7, a kopia robocza Jerry'ego jest nieaktualna. Jerry aktualizuje również plik README i próbuje zatwierdzić swoje zmiany.
Plik README Jerry'ego wygląda następująco.
[jerry@CentOS trunk]$ cat README
* File list
1) array.c Implementation of array operation.
2) README Instructions for user.
[jerry@CentOS trunk]$ svn status
M README
[jerry@CentOS trunk]$ svn commit -m "Updated README"
Sending trunk/README
svn: Commit failed (details follow):
svn: File or directory 'README' is out of date; try updating
svn: resource out of date; try updating
Krok 1: Wyświetl konflikty
Subversion wykrył, że plik README zmienił się od czasu ostatniej aktualizacji. Więc Jerry musi zaktualizować swoją kopię roboczą.
[jerry@CentOS trunk]$ svn up
Conflict discovered in 'README'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
Subversion skarży się, że istnieje konflikt z plikiem README, a Subversion nie wie, jak go rozwiązać. Dlatego Jerry wybiera opcję df , aby przeanalizować konflikt.
[jerry@CentOS trunk]$ svn up
Conflict discovered in 'README'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: df
--- .svn/text-base/README.svn-base Sat Aug 24 18:07:13 2013
+++ .svn/tmp/README.tmp Sat Aug 24 18:13:03 2013
@@ -1 +1,11 @@
-/* TODO: Add contents in README file */
+<<<<<<< .mine
+* File list
+
+1) array.c Implementation of array operation.
+2) README Instructions for user.
+=======
+* Supported operations:
+
+1) Accept input
+2) Display array elements
+>>>>>>> .r7
Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
Krok 2: Odłóż konflikty
Następnie Jerry wybiera opcje odroczenia (p) , aby rozwiązać konflikt.
Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: p
C README
Updated to revision 7.
Summary of conflicts:
Text conflicts: 1
Po otwarciu pliku README w edytorze tekstu zdaje sobie sprawę, że Subversion zawiera zarówno kod Toma, jak i jego kod ze znacznikami konfliktu.
[jerry@CentOS trunk]$ cat README
<<<<<<< .min
* File list
1) array.c Implementation of array operation.
2) README Instructions for user.
=======
* Supported operations:
1) Accept input
2) Display array elements
>>>>>>> .r7
Jerry chce zmian Toma, jak również swoich, więc po prostu usuwa linie zawierające znaczniki konfliktu.
Tak więc zmodyfikowany plik README będzie wyglądał następująco.
[jerry@CentOS trunk]$ cat README
* File list
1) array.c Implementation of array operation.
2) README Instructions for user.
* Supported operations:
1) Accept input
2) Display array elements
Jerry rozwiązał konflikt i ponawia zatwierdzenie.
[jerry@CentOS trunk]$ svn commit -m "Updated README"
svn: Commit failed (details follow):
svn: Aborting commit: '/home/jerry/project_repo/trunk/README' remains in conflict
[jerry@CentOS trunk]$ svn status
? README.r6
? README.r7
? README.mine
C README
Krok 3: Rozwiązywanie konfliktów
W powyższym zatwierdzeniu list Cwskazuje, że istnieje konflikt w pliku README. Jerry rozwiązał konflikt, ale nie powiedział Subversion, że rozwiązał konflikt. Używa polecenia rozwiązania, aby poinformować Subversion o rozwiązaniu konfliktu.
[jerry@CentOS trunk]$ svn resolve --accept=working README
Resolved conflicted state of 'README'
[jerry@CentOS trunk]$ svn status
M README
[jerry@CentOS trunk]$ svn commit -m "Updated README"
Sending trunk/README
Transmitting file data .
Committed revision 8.