SVN - Resolver Conflitos

Tom decide adicionar um arquivo README para o projeto. Então ele cria o arquivo README e adiciona a lista TODO a ele. Depois de adicionar isso, o repositório de arquivos está na revisão 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 verifica o código mais recente, que está na revisão 6. E imediatamente começa a trabalhar. Depois de algumas horas, Tom atualiza o arquivo README e confirma suas alterações. O README modificado terá esta aparência.

[[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.

Agora, o repositório está na revisão 7 e a cópia de trabalho de Jerry está desatualizada. Jerry também atualiza o arquivo README e tenta confirmar suas alterações.

O arquivo README de Jerry se parece com isso.

[[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

Etapa 1: Ver os conflitos

O Subversion detectou que o arquivo README foi alterado desde a última atualização. Então, Jerry tem que atualizar sua cópia de trabalho.

[[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:

O Subversion está reclamando que há um conflito com o arquivo README, e o Subversion não sabe como resolver isso. Portanto, Jerry escolhe a opção df para revisar o conflito.

[[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:

Etapa 2: adiar conflitos

Em seguida, Jerry escolhe as opções de adiar (p) , para que ele possa resolver o conflito.

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

Após abrir o README no editor de texto, ele percebe que o Subversion incluiu o código de Tom e seu código com marcadores de conflito.

[[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 deseja as alterações de Tom assim como as dele, então ele apenas remove as linhas que contêm os marcadores de conflito.

Portanto, o README modificado terá esta aparência.

[[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 resolveu o conflito e ele tenta se comprometer novamente.

[[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

Etapa 3: resolver conflitos

No commit acima, a carta Cindica que há um conflito no arquivo LEIA-ME. Jerry resolveu o conflito, mas não disse ao Subversion que ele havia resolvido o conflito. Ele usa o comando resolve para informar o Subversion sobre a resolução do conflito.

[[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.