- SVN 教程
- SVN - 首页
- SVN - 基本概念
- SVN - 环境设置
- SVN - 生命周期
- SVN - 检出过程
- SVN - 执行更改
- SVN - 评阅更改
- SVN - 更新过程
- SVN - 纠正错误
- SVN - 解决冲突
- SVN - 标签
- SVN - 分支
- SVN 有用资源
- SVN - 快速指南
- SVN - 有用资源
- SVN - 讨论
SVN - 解决冲突
汤姆决定为其项目添加一个 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.
杰瑞检出当前代码,即版本 6。他立即开始工作。几个小时后,汤姆更新了 README 文件并提交了他的更改。修改后的 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,杰瑞的工作副本已过期。杰瑞也更新了 README 文件并尝试提交他的更改。
杰瑞 的 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 检测到 README 文件自上次更新后已发生更改。因此,杰瑞必须更新他的工作副本。
[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 抱怨与 README 文件存在冲突,Subversion 不知道如何解决此问题。因此,杰瑞选择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:推迟冲突
接下来,杰瑞选择推迟(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 已经包含了汤姆的代码和他的代码以及冲突标记。
[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
杰瑞希望汤姆的更改和他的更改同时存在,所以他只是删除了包含冲突标记的行。
因此,修改后的 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@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.
广告