开发学院,分享开发教程和最新动态

SVN 解决冲突

SVN 解决冲突

  Tom决定为他们的项目添加自述文件。因此,他创建了自述文件,并将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更新自述文件并提交更改。修改后的自述文件如下所示。

[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还更新自述文件并尝试提交更改。

Jerry的自述文件如下所示。

[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

Step 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:

Step 2: 延缓冲突

  Jerry 选择推迟(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

  在文本编辑器中打开自述文件后,他意识到,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 同他的变化一起修改,所以他只是删除了行包含冲突标记。所以修改后的README文件会如下这个样子。

[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 解决冲突并提交,并让他重试。

[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

Step 3: 解决冲突

  这里是C字母表示有README文件冲突。Jerry 解决冲突,但没有告诉Subversion他解决冲突。他使用解决命令通知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.