SVN - Исправить ошибки

Предположим, Джерри случайно изменяет файл array.c и получает ошибки компиляции. Теперь он хочет выбросить изменения. В этой ситуации поможет операция «возврат». Операция возврата отменит любые локальные изменения в файле или каталоге и разрешит любые конфликтующие состояния.

[jerry@CentOS trunk]$ svn status

Вышеупомянутая команда даст следующий результат.

M       array.c

Попробуем составить массив следующим образом:

[jerry@CentOS trunk]$ make array

Вышеупомянутая команда даст следующий результат.

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

Джерри выполняет операцию возврата к файлу array.c .

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

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

Теперь скомпилируйте код.

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

После операции возврата его рабочая копия возвращается в исходное состояние. Операция возврата может вернуть как отдельный файл, так и весь каталог. Чтобы вернуть каталог, используйте параметр -R, как показано ниже.

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

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

До сих пор мы видели, как отменить изменения, внесенные в рабочую копию. Но что, если вы хотите отменить зафиксированную ревизию! Инструмент Система контроля версий не позволяет удалять историю из репозитория. Мы можем только добавить историю. Это произойдет, даже если вы удалите файлы из репозитория. Чтобы отменить старую ревизию, мы должны отменить все изменения, внесенные в старую ревизию, а затем зафиксировать новую ревизию. Это называется обратным слиянием.

Предположим, Джерри добавляет код для операции линейного поиска. После проверки он фиксирует свои изменения.

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

Джерри любопытно, что делает Том. Поэтому он проверяет сообщения журнала Subversion.

[jerry@CentOS trunk]$ svn log

Приведенная выше команда даст следующий результат.

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

После просмотра сообщений журнала Джерри понимает, что совершил серьезную ошибку. Потому что Том уже реализовал операцию двоичного поиска, которая лучше, чем линейный поиск; его код является избыточным, и теперь Джерри должен вернуть свои изменения к предыдущей версии. Итак, сначала найдите текущую ревизию репозитория. В настоящее время репозиторий находится на версии 22, и мы должны вернуть его к предыдущей версии, то есть к версии 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.