導讀 Apache Subversion 通常被縮寫成 SVN,是一個開放源代碼的版本控制系統,Subversion 在 2000 年由 CollabNet Inc 開發,現在發展成為 Apache 軟件基金會的一個項目,同樣是一個豐富的開發者和用戶社區的一部分。
SVN相對于的RCS、CVS,采用了分支管理系統,它的設計目標就是取代CVS。互聯網上免費的版本控制服務多基于Subversion。

假設 A、B 兩個用戶都在版本號為 100 的時候,更新了 kingtuns.txt 這個文件,A 用戶在修改完成之后提交 kingtuns.txt 到服務器, 這個時候提交成功,這個時候 kingtuns.txt 文件的版本號已經變成 101 了。同時B用戶在版本號為 100 的 kingtuns.txt 文件上作修改, 修改完成之后提交到服務器時,由于不是在當前最新的 101 版本上作的修改,所以導致提交失敗。

我們已在本地檢出 runoob01 庫,下面我們將實現版本沖突的解決方法。

我們發現 HelloWorld.html 文件存在錯誤,需要修改文件并提交到版本庫中。

我們將 HelloWorld.html 的內容修改為 "HelloWorld! http://www.runoob.com/"。

[email protected]:~/svn/runoob01/trunk# cat HelloWorld.html 
HelloWorld! http://www.runoob.com/

用下面的命令查看更改:

[email protected]:~/svn/runoob01/trunk# svn diff 
Index: HelloWorld.html
===================================================================
--- HelloWorld.html     (revision 5)
+++ HelloWorld.html     (working copy)
@@ -1,2 +1 @@
-HelloWorld! http://www.runoob.com/
+HelloWorld! http://www.runoob.com/!

嘗試使用下面的命令來提交他的更改:

[email protected]:~/svn/runoob01/trunk# svn commit -m "change HelloWorld.html first"
Sending        HelloWorld.html
Transmitting file data .svn: E160028: Commit failed (details follow):
svn: E160028: File '/trunk/HelloWorld.html' is out of date

這時我發現提交失敗了。

因為此時,HelloWorld.html 已經被 user02 修改并提交到了倉庫。Subversion 不會允許 user01(本例使用的 svn 賬號)提交更改,因為 user02 已經修改了倉庫,所以我們的工作副本已經失效。

為了避免兩人的代碼被互相覆蓋,Subversion 不允許我們進行這樣的操作。所以我們在提交更改之前必須先更新工作副本。所以使用 update 命令,如下:

[email protected]:~/svn/runoob01/trunk# svn update
Updating '.':
C    HelloWorld.html
Updated to revision 6.
Conflict discovered in file 'HelloWorld.html'.
Select: (p) postpone, (df) show diff, (e) edit file, (m) merge,
        (mc) my side of conflict, (tc) their side of conflict,
        (s) show all options: mc
Resolved conflicted state of 'HelloWorld.html'
Summary of conflicts:
  Text conflicts: 0 remaining (and 1 already resolved)

這邊輸入"mc",以本地的文件為主。你也可以使用其選項對沖突的文件進行不同的操作。

默認是更新到最新的版本,我們也可以指定更新到哪個版本

svn update -r6

此時工作副本是和倉庫已經同步,可以安全地提交更改了

[email protected]:~/svn/runoob01/trunk# svn commit -m "change HelloWorld.html second"
Sending        HelloWorld.html
Transmitting file data .
Committed revision 7.

本文原創地址:http://www.ouxnnm.live/fun-svn-conflict.html編輯:王浩,審核員:逄增寶