SVN 修正错误
SVN 修正错误
Jerry 不小心修改array.c 文件导致编译错误,现在,他想撤回变化。在这种情况下他需要执行revert操作。revert将撤消对文件或目录的任何本地更改,并解决所有冲突状态。
[jerry@CentOS trunk]$ svn status
上述命令将产生如下结果
M array.c
让我们创建一个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文件进行revert操作 [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
revert操作后,他的工作副本是回到它的原始状态。revert操作可以恢复单个文件以及完整的目录。恢复目录用户 -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.