假設Jerry 不小心修改array.c 檔案編譯錯誤。現在,他想扔掉的變化。在這種情況下,恢復操作會有所幫助。恢復操作將撤消任何地方到一個檔案或目錄的更改,並解決任何衝突的狀態。
[jerry@CentOS trunk]$ svn status
上面的命令將產生以下結果
M array.c
讓我們 make array 如下:
[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
Jerry 對 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 新增程式碼線性搜尋操作。經核實後,他提交了他的變化。
[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 的紀錄檔訊息。
[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
檢視紀錄檔訊息後,Jerry意識到自己做了嚴重的錯誤。因為Tom已經實現二進位制搜尋操作,這是優於線性搜尋。意味著他的程式碼是多餘的,現在Jerry有他的變化恢復到以前的版本。所以先找到儲存庫的當前版本。目前庫是在修訂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.