SVN - Corrigir erros

Suponha que Jerry modifique acidentalmente o arquivo array.c e esteja recebendo erros de compilação. Agora ele quer jogar fora as mudanças. Nessa situação, a operação 'reverter' ajudará. A operação de reversão desfará todas as alterações locais em um arquivo ou diretório e resolverá quaisquer estados de conflito.

[jerry@CentOS trunk]$ svn status

O comando acima produzirá o seguinte resultado.

M       array.c

Vamos tentar fazer array da seguinte maneira:

[jerry@CentOS trunk]$ make array

O comando acima produzirá o seguinte resultado.

cc     array.c   -o array
array.c: In function ‘main’:
array.c:26: error: ‘n’ undeclared (first use in this function)
array.c:26: error: (Each undeclared identifier is reported only once
array.c:26: error: for each function it appears in.)
array.c:34: error: ‘arr’ undeclared (first use in this function)
make: *** [array] Error 1

Jerry executa a operação de 'reversão' no arquivo array.c .

[jerry@CentOS trunk]$ svn revert array.c 
Reverted 'array.c'

[jerry@CentOS trunk]$ svn status
[jerry@CentOS trunk]$

Agora compile o código.

[jerry@CentOS trunk]$ make array
cc     array.c   -o array

Após a operação de reversão, sua cópia de trabalho volta ao estado original. A operação de reversão pode reverter um único arquivo, bem como um diretório completo. Para reverter um diretório, use a opção -R conforme mostrado abaixo.

[jerry@CentOS project_repo]$ pwd
/home/jerry/project_repo

[jerry@CentOS project_repo]$ svn revert -R trunk

Até agora, vimos como reverter as alterações, que foram feitas na cópia de trabalho. Mas e se você quiser reverter uma revisão confirmada! A ferramenta do sistema de controle de versão não permite excluir o histórico do repositório. Podemos apenas anexar a história. Isso acontecerá mesmo se você excluir arquivos do repositório. Para desfazer uma revisão antiga, temos que reverter todas as mudanças feitas na revisão antiga e então submeter uma nova revisão. Isso é chamado de mesclagem reversa.

Suponhamos que Jerry adicione um código para a operação de pesquisa linear. Após a verificação, ele confirma suas alterações.

[jerry@CentOS trunk]$ svn diff
Index: array.c
===================================================================
--- array.c   (revision 21)
+++ array.c   (working copy)
@@ -2,6 +2,16 @@
 
 #define MAX 16
 
+int linear_search(int *arr, int n, int key)
+{
+   int i;
+
+   for (i = 0; i < n; ++i)
+      if (arr[i] == key)
+         return i;
+   return -1;
+}
+
 void bubble_sort(int *arr, int n)
 {
    int i, j, temp, flag = 1;

[jerry@CentOS trunk]$ svn status
?       array
M       array.c

[jerry@CentOS trunk]$ svn commit -m "Added code for linear search"
Sending        trunk/array.c
Transmitting file data .
Committed revision 22.

Jerry está curioso para saber o que Tom está fazendo. Portanto, ele verifica as mensagens de log do Subversion.

[jerry@CentOS trunk]$ svn log

O comando acima produzirá o seguinte resultado.

------------------------------------------------------------------------
r5 | tom   | 2013-08-24 17:15:28 +0530 (Sat, 24 Aug 2013) | 1 line

Add binary search operation
------------------------------------------------------------------------
r4 | jerry | 2013-08-18 20:43:25 +0530 (Sun, 18 Aug 2013) | 1 line

Add function to accept input and to display array contents

Depois de ver as mensagens de log, Jerry percebe que cometeu um erro grave. Porque Tom já implementou a operação de pesquisa binária, que é melhor do que a pesquisa linear; seu código é redundante e agora Jerry precisa reverter suas alterações para a revisão anterior. Portanto, primeiro encontre a revisão atual do repositório. Atualmente, o repositório está na revisão 22 e temos que revertê-lo para a revisão anterior, ou seja, revisão 21.

[jerry@CentOS trunk]$ svn up 
At revision 22.

[jerry@CentOS trunk]$ svn merge -r 22:21 array.c 
--- Reverse-merging r22 into 'array.c':
U    array.c

[jerry@CentOS trunk]$ svn commit -m "Reverted to revision 21"
Sending        trunk/array.c
Transmitting file data .
Committed revision 23.