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.