课程表

SVN课程

工具箱
速查手册

SVN 修复错误

当前位置:免费教程 » 软件/图像 » SVN

假设 Jerry 意外地更改了 array.c 文件而导致编译错误,他想放弃修改。在这种状况下,‘revert’ 操作将派上用场。revert 操作将撤销任何文件或目录里的局部更改。

  1. [jerry@CentOS trunk]$ svn status

上面的命令将会产生下面的效果

  1. M array.c

让我们尝试创建一个数组,如下:

  1. [jerry@CentOS trunk]$ make array

上面的命令将会产生下面的效果

  1. cc array.c -o array
  2. array.c: In function main’:
  3. array.c:26: error: n undeclared (first use in this function)
  4. array.c:26: error: (Each undeclared identifier is reported only once
  5. array.c:26: error: for each function it appears in.)
  6. array.c:34: error: arr undeclared (first use in this function)
  7. make: *** [array] Error 1

Jerry 在 array.c 文件里执行了‘revert’操作。

  1. [jerry@CentOS trunk]$ svn revert array.c
  2. Reverted 'array.c'
  3. [jerry@CentOS trunk]$ svn status
  4. [jerry@CentOS trunk]$

现在开始编译代码。

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

进行 revert 操作之后,他的文件恢复了原始的状态。 revert 操作不单单可以使单个文件恢复原状,而且可以使整个目录恢复原状。恢复目录用 -R 命令,如下。

  1. [jerry@CentOS project_repo]$ pwd
  2. /home/jerry/project_repo
  3. [jerry@CentOS project_repo]$ svn revert -R trunk

现在,我们已经知道如何撤销更改。但是,假使你想恢复一个已经提交的版本怎么办!Version Control System 工具不允许删除仓库的历史纪录。为了消除一个旧版本,我们必须撤销旧版本里的所有更改然后提交一个新版本。这种操作叫做 reverse merge。

假设 Jerry 添加了一段线性搜索操作的代码,核查之后,他提交了更改。

  1. [jerry@CentOS trunk]$ svn diff
  2. Index: array.c
  3. ===================================================================
  4. --- array.c (revision 21)
  5. +++ array.c (working copy)
  6. @@ -2,6 +2,16 @@
  7. #define MAX 16
  8. +int linear_search(int *arr, int n, int key)
  9. +{
  10. + int i;
  11. +
  12. + for (i = 0; i < n; ++i)
  13. + if (arr[i] == key)
  14. + return i;
  15. + return -1;
  16. +}
  17. +
  18. void bubble_sort(int *arr, int n)
  19. {
  20. int i, j, temp, flag = 1;
  21. [jerry@CentOS trunk]$ svn status
  22. ? array
  23. M array.c
  24. [jerry@CentOS trunk]$ svn commit -m "Added code for linear search"
  25. Sending trunk/array.c
  26. Transmitting file data .
  27. Committed revision 22.

Jerry 很好奇 Tom 以前写的代码。所以他检查了 Subversion 的 log 信息。

  1. [jerry@CentOS trunk]$ svn log

上面的命令将会产生下面的效果

  1. ------------------------------------------------------------------------
  2. r5 | tom | 2013-08-24 17:15:28 +0530 (Sat, 24 Aug 2013) | 1 line
  3. Add binary search operation
  4. ------------------------------------------------------------------------
  5. r4 | jerry | 2013-08-18 20:43:25 +0530 (Sun, 18 Aug 2013) | 1 line
  6. Add function to accept input and to display array contents

查看 log 信息之后,Jerry 意识到他犯了个严重的错误。因为 Tom 已经写了比线性搜索更好的二分法搜索,Jerry 发现自己的代码很冗余,他决定撤销之前对版本的修改。首先,找到仓库的当前版本,现在是版本 22,我们要撤销回之前的版本,比如版本 21。

  1. [jerry@CentOS trunk]$ svn up
  2. At revision 22.
  3. [jerry@CentOS trunk]$ svn merge -r 22:21 array.c
  4. --- Reverse-merging r22 into 'array.c':
  5. U array.c
  6. [jerry@CentOS trunk]$ svn commit -m "Reverted to revision 21"
  7. Sending trunk/array.c
  8. Transmitting file data .
  9. Committed revision 23.
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号