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。