SVN - Risolvi i conflitti
Tom decide di aggiungere un file README per il loro progetto. Quindi crea il file README e vi aggiunge l'elenco TODO. Dopo aver aggiunto questo, il repository di file è alla revisione 6.
[[email protected] trunk]$ cat README
/* TODO: Add contents in README file */
[[email protected] trunk]$ svn status
? README
[[email protected] trunk]$ svn add README
A README
[[email protected] trunk]$ svn commit -m "Added README file. Will update it's content in future."
Adding trunk/README
Transmitting file data .
Committed revision 6.
Jerry controlla l'ultimo codice che è alla revisione 6. E immediatamente inizia a lavorare. Dopo alcune ore, Tom aggiorna il file README e salva le modifiche. Il README modificato avrà questo aspetto.
[[email protected] trunk]$ cat README
* Supported operations:
1) Accept input
2) Display array elements
[[email protected] trunk]$ svn status
M README
[[email protected] trunk]$ svn commit -m "Added supported operation in README"
Sending trunk/README
Transmitting file data .
Committed revision 7.
Ora, il repository è alla revisione 7 e la copia di lavoro di Jerry non è aggiornata. Jerry aggiorna anche il file README e cerca di eseguire il commit delle modifiche.
Il file README di Jerry ha questo aspetto.
[[email protected] trunk]$ cat README
* File list
1) array.c Implementation of array operation.
2) README Instructions for user.
[[email protected] trunk]$ svn status
M README
[[email protected] 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
Passaggio 1: visualizzazione dei conflitti
Subversion ha rilevato che il file README è cambiato dall'ultimo aggiornamento. Quindi, Jerry deve aggiornare la sua copia di lavoro.
[[email protected] 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 lamenta che c'è un conflitto con il file README e Subversion non sa come risolverlo. Quindi Jerry sceglie l' opzione df per rivedere il conflitto.
[[email protected] 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:
Passaggio 2: posticipare i conflitti
Successivamente Jerry sceglie le opzioni di posticipo (p) , in modo che possa risolvere il conflitto.
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
Dopo aver aperto il README nell'editor di testo, si rende conto che Subversion ha incluso sia il codice di Tom che il suo codice con indicatori di conflitto.
[[email protected] 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 vuole le modifiche di Tom così come le sue, quindi rimuove solo le linee contenenti i segnalini di conflitto.
Quindi, il README modificato avrà questo aspetto.
[[email protected] 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 ha risolto il conflitto e riprova a impegnarsi.
[[email protected] trunk]$ svn commit -m "Updated README"
svn: Commit failed (details follow):
svn: Aborting commit: '/home/jerry/project_repo/trunk/README' remains in conflict
[[email protected] trunk]$ svn status
? README.r6
? README.r7
? README.mine
C README
Passaggio 3: risoluzione dei conflitti
Nel commit sopra, la lettera Cindica che c'è un conflitto nel file README. Jerry ha risolto il conflitto ma non ha detto a Subversion che aveva risolto il conflitto. Usa il comando di risoluzione per informare Subversion sulla risoluzione del conflitto.
[[email protected] trunk]$ svn resolve --accept=working README
Resolved conflicted state of 'README'
[[email protected] trunk]$ svn status
M README
[[email protected] trunk]$ svn commit -m "Updated README"
Sending trunk/README
Transmitting file data .
Committed revision 8.