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.