开发手册 欢迎您!
软件开发者资料库

SVN - Fix Mistakes

SVN Fix Mistakes - 学习Apache Subversion(SVN),这是一个简单易用的版本控制系统,使用这个初学者教程,包含从基本概念,环境,生命周期,创建存储库,签入过程,更新过程开始的基础知识到高级知识。结帐流程,执行更改,审核更改,修复错误,解决冲突,提交更改,分支和SVN标记。

假设 Jerry 意外修改 array.c 文件并且他正在收到编译错误.现在他想抛弃变化.在这种情况下,"恢复"操作将有所帮助.还原操作将撤消对文件或目录的任何本地更改并解决任何冲突状态.

[jerry @ CentOS trunk] $ svn status

以上命令将产生以下结果.

M array.c

让我们尝试按如下方式制作数组:

[jerry @ CentOS trunk] $ make array

上面的命令将产生以下结果.

cc     array.c   -o arrayarray.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 oncearray.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 arraycc     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 diffIndex: 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?       arrayM       array.c[jerry@CentOS trunk]$ svn commit -m "Added code for linear search"Sending        trunk/array.cTransmitting 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 lineAdd binary search operation------------------------------------------------------------------------r4 | jerry | 2013-08-18 20:43:25 +0530 (Sun, 18 Aug 2013) | 1 lineAdd 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.cTransmitting file data .Committed revision 23.