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文件执行“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
    
    还原操作后,他的工作副本将恢复其原始状态。还原操作可以还原单个文件以及完整目录。要还原目录,请使用-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   | 2020-08-24 17:15:28 +0530 (Sat, 24 Aug 2020) | 1 line
    
    Add binary search operation
    ------------------------------------------------------------------------
    r4 | jerry | 2020-08-18 20:43:25 +0530 (Sun, 18 Aug 2020) | 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.