SVN 解决冲突

  • 解决冲突

    Tom决定为其项目添加README文件。因此,他创建了README文件并将TODO列表添加到其中。添加后,文件存储库的版本为6。
     
    [tom@CentOS trunk]$ cat README 
    /* TODO: Add contents in README file */
    
    [tom@CentOS trunk]$ svn status
    ?       README
    
    [tom@CentOS trunk]$ svn add README 
    A         README
    
    [tom@CentOS trunk]$ svn commit -m "Added README file. Will update it's content in future."
    Adding         trunk/README
    Transmitting file data .
    Committed revision 6. 
    
    Jerry签出了修订版6中的最新代码。他立即开始工作。几个小时后,Tom更新了README文件并提交了更改。修改后的自述文件将如下所示。
     
    [tom@CentOS trunk]$ cat README 
    * Supported operations:
    
    1) Accept input
    2) Display array elements
    
    [tom@CentOS trunk]$ svn status
    M       README
    
    [tom@CentOS trunk]$ svn commit -m "Added supported operation in README"
    Sending        trunk/README
    Transmitting file data .
    Committed revision 7.
    
    现在,该存储库的版本为7,而Jerry的工作副本已过期。Jerry还更新了README文件并尝试提交更改。
    Jerry的README文件如下所示。
     
    [jerry@CentOS trunk]$ cat README 
    * File list
    
    1) array.c      Implementation of array operation.
    2) README       Instructions for user.
    
    [jerry@CentOS trunk]$ svn status
    M       README
    
    [jerry@CentOS trunk]$ svn commit -m "Updated README"
    Sending        trunk/README
    svn: Commit failed (details follow):
    svn: File or directory 'README' is out of date; try updating
    svn: resource out of date; try updating
    
  • 步骤1:查看冲突

    Subversion检测到自上次更新以来自述文件已更改。因此,Jerry必须更新他的工作副本。
     
    [jerry@CentOS trunk]$ svn up
    Conflict discovered in 'README'.
    Select: (p) postpone, (df) diff-full, (e) edit,
            (mc) mine-conflict, (tc) theirs-conflict,
            (s) show all options:
    Subversion抱怨自述文件存在冲突,并且Subversion不知道如何解决此问题。因此,Jerry选择了df选项来检查冲突。
    
    [jerry@CentOS trunk]$ svn up
    Conflict discovered in 'README'.
    Select: (p) postpone, (df) diff-full, (e) edit,
            (mc) mine-conflict, (tc) theirs-conflict,
            (s) show all options: df
    --- .svn/text-base/README.svn-base      Sat Aug 24 18:07:13 2013
    +++ .svn/tmp/README.tmp Sat Aug 24 18:13:03 2013
    @@ -1 +1,11 @@
    -/* TODO: Add contents in README file */
    +<<<<<<< .mine
    +* File list
    +
    +1) array.c     Implementation of array operation.
    +2) README      Instructions for user.
    +=======
    +* Supported operations:
    +
    +1) Accept input
    +2) Display array elements
    +>>>>>>> .r7
    Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
            (mc) mine-conflict, (tc) theirs-conflict,
            (s) show all options:
    
  • 步骤2:推迟冲突

    Next Jerry选择postpone(p)选项,以便他可以解决冲突。
     
    Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
            (mc) mine-conflict, (tc) theirs-conflict,
            (s) show all options: p
    C    README
    Updated to revision 7.
    Summary of conflicts:
      Text conflicts: 1
    
    在文本编辑器中打开README之后,他意识到Subversion包含了Tom的代码和带有冲突标记的代码。
     
    [jerry@CentOS trunk]$ cat README
    <<<<<<< .min
    * File list
    
    1) array.c      Implementation of array operation.
    2) README       Instructions for user.
    =======
    * Supported operations:
    
    1) Accept input
    2) Display array elements
    >>>>>>> .r7
    
    Jerry希望Tom也能做出改变,因此他只删除了包含冲突标记的行。
    因此,修改后的自述文件将如下所示。
     
    [jerry@CentOS trunk]$ cat README
    * File list
    
    1) array.c      Implementation of array operation.
    2) README       Instructions for user.
    
    * Supported operations:
    
    1) Accept input
    2) Display array elements
    
    杰里解决了冲突,然后重试提交。
     
    [jerry@CentOS trunk]$ svn commit -m "Updated README"
    svn: Commit failed (details follow):
    svn: Aborting commit: '/home/jerry/project_repo/trunk/README' remains in conflict
     
    [jerry@CentOS trunk]$ svn status
    ?       README.r6
    ?       README.r7
    ?       README.mine
    C       README
    
  • 步骤3:解决冲突

    在上面的提交中,字母C表示README文件中存在冲突。杰里解决了冲突,但没有告诉Subversion他已经解决了冲突。他使用resolve命令通知Subversion有关冲突解决的信息。
     
    [jerry@CentOS trunk]$ svn resolve --accept=working README
    Resolved conflicted state of 'README'
    
    [jerry@CentOS trunk]$ svn status
    M       README
    
    [jerry@CentOS trunk]$ svn commit -m "Updated README"
    Sending        trunk/README
    Transmitting file data .
    Committed revision 8.