假設(shè) Jerry 意外地更改了 array.c 文件而導(dǎo)致編譯錯(cuò)誤,他想放棄修改。在這種狀況下,‘revert’ 操作將派上用場。revert 操作將撤銷任何文件或目錄里的局部更改。
[jerry@CentOS trunk]$ svn status
上面的命令將會產(chǎn)生下面的效果
M array.c
讓我們嘗試創(chuàng)建一個(gè)數(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
進(jìn)行 revert 操作之后,他的文件恢復(fù)了原始的狀態(tài)。 revert 操作不單單可以使單個(gè)文件恢復(fù)原狀,而且可以使整個(gè)目錄恢復(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ù)一個(gè)已經(jīng)提交的版本怎么辦!Version Control System 工具不允許刪除倉庫的歷史紀(jì)錄。為了消除一個(gè)舊版本,我們必須撤銷舊版本里的所有更改然后提交一個(gè)新版本。這種操作叫做 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 意識到他犯了個(gè)嚴(yán)重的錯(cuò)誤。因?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.
更多建議: