鍍金池/ 教程/ Java/ SVN 修復(fù)錯誤
SVN 檢查更改
SVN 更新過程
SVN 修復(fù)錯誤
什么是版本控制系統(tǒng)(VCS)
SVN 檢出過程
SVN 執(zhí)行修改
SVN 標(biāo)簽
SVN 分支
SVN 生命周期
SVN 環(huán)境搭建
SVN 解決沖突

SVN 修復(fù)錯誤

假設(shè) Jerry 意外地更改了 array.c 文件而導(dǎo)致編譯錯誤,他想放棄修改。在這種狀況下,‘revert’ 操作將派上用場。revert 操作將撤銷任何文件或目錄里的局部更改。

[jerry@CentOS trunk]$ svn status

上面的命令將會產(chǎn)生下面的效果

M       array.c

讓我們嘗試創(chuàng)建一個數(shù)組,如下:

[jerry@CentOS trunk]$ make array

上面的命令將會產(chǎn)生下面的效果

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: ‘a(chǎn)rr’ undeclared (first use in this function)
make: *** [array] Error 1

Jerry 在 array.c 文件里執(zhí)行了‘revert’操作。

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

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

現(xiàn)在開始編譯代碼。

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

進行 revert 操作之后,他的文件恢復(fù)了原始的狀態(tài)。 revert 操作不單單可以使單個文件恢復(fù)原狀,而且可以使整個目錄恢復(fù)原狀?;謴?fù)目錄用 -R 命令,如下。

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

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

現(xiàn)在,我們已經(jīng)知道如何撤銷更改。但是,假使你想恢復(fù)一個已經(jīng)提交的版本怎么辦!Version Control System 工具不允許刪除倉庫的歷史紀(jì)錄。為了消除一個舊版本,我們必須撤銷舊版本里的所有更改然后提交一個新版本。這種操作叫做 reverse merge。

假設(shè) Jerry 添加了一段線性搜索操作的代碼,核查之后,他提交了更改。

[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 很好奇 Tom 以前寫的代碼。所以他檢查了 Subversion 的 log 信息。

[jerry@CentOS trunk]$ svn log

上面的命令將會產(chǎn)生下面的效果

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

查看 log 信息之后,Jerry 意識到他犯了個嚴(yán)重的錯誤。因為 Tom 已經(jīng)寫了比線性搜索更好的二分法搜索,Jerry 發(fā)現(xiàn)自己的代碼很冗余,他決定撤銷之前對版本的修改。首先,找到倉庫的當(dāng)前版本,現(xiàn)在是版本 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.