课程表

SVN课程

工具箱
速查手册

SVN 解决冲突

当前位置:免费教程 » 软件/图像 » SVN

Tom决定给他的工程添加一个 README 文件,于是他创建了这个文件并在其中添加了 TODO 列表。添加完成之后,该文件的存放处位于 revision 6.

  1. [tom@CentOS trunk]$ cat README
  2. /* TODO: Add contents in README file */
  3. [tom@CentOS trunk]$ svn status
  4. ? README
  5. [tom@CentOS trunk]$ svn add README
  6. A README
  7. [tom@CentOS trunk]$ svn commit -m "Added README file. Will update it's content in future."
  8. Adding trunk/README
  9. Transmitting file data .
  10. Committed revision 6.

Jerry 检出了位于 revision 6 最后的代码,并且他直接立刻开始了工作。几个小时以后,Tom 更新了 README 文件并且提交了他所修改的地方。修改的 README 将会看上去像这个样子。

  1. [tom@CentOS trunk]$ cat README
  2. * Supported operations:
  3. 1) Accept input
  4. 2) Display array elements
  5. [tom@CentOS trunk]$ svn status
  6. M README
  7. [tom@CentOS trunk]$ svn commit -m "Added supported operation in README"
  8. Sending trunk/README
  9. Transmitting file data .
  10. Committed revision 7.

现在,仓库位于修改版本 7,并且 Jerry 的工作副本已经过期。Jerry 也更新 README 文件并且试图提交他的更改。

Jerry 的 README 文件将会看上去像这个样子:

  1. [jerry@CentOS trunk]$ cat README
  2. * File list
  3. 1) array.c Implementation of array operation.
  4. 2) README Instructions for user.
  5. [jerry@CentOS trunk]$ svn status
  6. M README
  7. [jerry@CentOS trunk]$ svn commit -m "Updated README"
  8. Sending trunk/README
  9. svn: Commit failed (details follow):
  10. svn: File or directory 'README' is out of date; try updating
  11. svn: resource out of date; try updating

第一步:视图冲突

Subversion 已经检测出 README 自上次更新后文件已经更改。所以,Jerry 必须更新他的工作副本。

  1. [jerry@CentOS trunk]$ svn up
  2. Conflict discovered in 'README'.
  3. Select: (p) postpone, (df) diff-full, (e) edit,
  4. (mc) mine-conflict, (tc) theirs-conflict,
  5. (s) show all options:

Subversion 提示说有一个冲突在 README 文件,并且 Subversion 并不知道如何解决这个问题。于是 Jerry 选择 df 选项来检查冲突。

  1. [jerry@CentOS trunk]$ svn up
  2. Conflict discovered in 'README'.
  3. Select: (p) postpone, (df) diff-full, (e) edit,
  4. (mc) mine-conflict, (tc) theirs-conflict,
  5. (s) show all options: df
  6. --- .svn/text-base/README.svn-base Sat Aug 24 18:07:13 2013
  7. +++ .svn/tmp/README.tmp Sat Aug 24 18:13:03 2013
  8. @@ -1 +1,11 @@
  9. -/* TODO: Add contents in README file */
  10. +<<<<<<< .mine
  11. +* File list
  12. +
  13. +1) array.c Implementation of array operation.
  14. +2) README Instructions for user.
  15. +=======
  16. +* Supported operations:
  17. +
  18. +1) Accept input
  19. +2) Display array elements
  20. +>>>>>>> .r7
  21. Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
  22. (mc) mine-conflict, (tc) theirs-conflict,
  23. (s) show all options:

第二步:推迟冲突

接下来 Jerrypostpone(p) 来解决冲突。

  1. Select: (p) postpone, (df) diff-full, (e) edit, (r) resolved,
  2. (mc) mine-conflict, (tc) theirs-conflict,
  3. (s) show all options: p
  4. C README
  5. Updated to revision 7.
  6. Summary of conflicts:
  7. Text conflicts: 1

在用文档编辑器打开 README 文件后,Jerry 意识到 Subversion 已经包含了 Tom 的代码和他的代码,并被冲突标示包裹了起来。

  1. [jerry@CentOS trunk]$ cat README
  2. <<<<<<< .min
  3. * File list
  4. 1) array.c Implementation of array operation.
  5. 2) README Instructions for user.
  6. =======
  7. * Supported operations:
  8. 1) Accept input
  9. 2) Display array elements
  10. >>>>>>> .r7

Jerry 想让 Tom 的更改跟他的保持一致,所以他决定移除包含冲突标识的行。

所以,更改后的 README 将会是这个样子。

  1. [jerry@CentOS trunk]$ cat README
  2. * File list
  3. 1) array.c Implementation of array operation.
  4. 2) README Instructions for user.
  5. * Supported operations:
  6. 1) Accept input
  7. 2) Display array elements

Jerry 解决了冲突并试图再次提交。

  1. [jerry@CentOS trunk]$ svn commit -m "Updated README"
  2. svn: Commit failed (details follow):
  3. svn: Aborting commit: '/home/jerry/project_repo/trunk/README' remains in conflict
  4. [jerry@CentOS trunk]$ svn status
  5. ? README.r6
  6. ? README.r7
  7. ? README.mine
  8. C README

第三步:解决冲突

在上面的提交中,字母 C 指示说有一个冲突在 README 文件。Jerry 解决了冲突但并没有告诉 Subversion 已经解决了冲突。 他使用了 resolve 命令通知 Subversion 冲突的解决。

  1. [jerry@CentOS trunk]$ svn resolve --accept=working README
  2. Resolved conflicted state of 'README'
  3. [jerry@CentOS trunk]$ svn status
  4. M README
  5. [jerry@CentOS trunk]$ svn commit -m "Updated README"
  6. Sending trunk/README
  7. Transmitting file data .
  8. Committed revision 8.
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号