
- 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.
廣告