SVN - 修正错误
假设 Jerry 不小心修改了 array.c 文件并且他遇到了编译错误。 现在他想扔掉这些变化。 在这种情况下,"revert"还原操作会有所帮助。 还原操作将撤消对文件或目录的任何本地更改并解决任何冲突状态。
[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
Jerry 对 array.c 文件执行"还原"操作。
[jerry@CentOS trunk]$ svn revert array.c Reverted 'array.c' [jerry@CentOS trunk]$ svn status [jerry@CentOS trunk]$
Now compile the code.
[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
The 上面的命令将产生以下结果。
------------------------------------------------------------------------ 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.