1. 程式人生 > 其它 >03.SVN檢出/解決衝突/提交

03.SVN檢出/解決衝突/提交

SVN 檢出操作


上一章中,我們建立了版本庫runoob01,URL為svn://192.168.0.1/runoob01,svn使用者user01有讀寫許可權。

我們就可以通過這個URL在客戶端對版本庫進行檢出操作。

svn checkout http://svn.server.com/svn/project_repo --username=user01 以上命令將產生如下結果:

檢出成功後在當前目錄下生成runoob01副本目錄。檢視檢出的內容

你想檢視更多關於版本庫的資訊,執行 info 命令。

SVN 解決衝突


版本衝突原因:

假設 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/"。

用下面的命令檢視更改:

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

這時我發現提交失敗了。

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

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

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

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

svn update -r6

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

SVN 提交操作

在上一章中,我們檢出了版本庫runoob01,對應的目錄放在/home/user01/runoob01中,下面我們針對這個庫進行版本控制。


我們在庫本版中需要增加一個readme的說明檔案。

檢視工作副本中的狀態。

此時 readme的狀態為?,說明它還未加到版本控制中。

將檔案readme加到版本控制,等待提交到版本庫。

檢視工作副本中的狀態

此時 readme的狀態為A,它意味著這個檔案已經被成功地新增到了版本控制中。

為了把 readme 儲存到版本庫中,使用 commit -m 加上註釋資訊來提交。

如果你忽略了 -m 選項, SVN會開啟一個可以輸入多行的文字編輯器來讓你輸入提交資訊。

現在 readme 被成功地新增到了版本庫中,並且修訂版本號自動增加了1。

SVN 版本回退


當我們想放棄對檔案的修改,可以使用 SVN revert 命令。

svn revert 操作將撤銷任何檔案或目錄裡的區域性更改。

我們對檔案 readme 進行修改,檢視檔案狀態。

這時我們發現修改錯誤,要撤銷修改,通過 svn revert 檔案 readme 迴歸到未修改狀態。

再檢視狀態。

進行 revert 操作之後,readme 檔案恢復了原始的狀態。 revert 操作不單單可以使單個檔案恢復原狀, 而且可以使整個目錄恢復原狀。恢復目錄用 -R 命令,如下。

但是,假如我們想恢復一個已經提交的版本怎麼辦。

為了消除一箇舊版本,我們必須撤銷舊版本里的所有更改然後提交一個新版本。這種操作叫做 reverse merge。

首先,找到倉庫的當前版本,現在是版本 22,我們要撤銷回之前的版本,比如版本 21。