==> 2008年6月19日 星期四 <==

分佈式版本控制系統SVK搭配TortoiseSVN的使用




  SVK與Linus所開發的Git相似,是一種分布式的版本控制系統,但它並不是完全從頭編寫的版本控制系統,而是基于 Subversion 的分布式的版本控制系统。如 CVS,Subversion 這些集中式管理系统存在对唯一的版本库过分依赖的缺陷:一旦不能正常连接到集中式的版本库,整个系统陷入瘫痪。分布式的版本控制系統最大的好處在于可以维护分布式的版本库,分散的开发人员可以通过 SVK 建立远程的 CVS,Subversion,P4 协议的版本库镜像,选择工作在自己合适的镜像版本库,这个镜像甚至可以是本地的,整个工作可以离线进行,然后在需要的时候同步镜像版本库到主版本库。

1. 假定條件

  首先假定妳已經熟悉所有SVN的操作,
  再假定 c:\svnlib 為SVN的對外的倉庫根目錄,
  假定妳機子已經安裝好SVN服務,
  若 c:\svnlib 下有一項目 test 倉庫(c:\svnlib\test), 假定妳能正確通過Tortoise讀寫其項目文件( svn://localhost/test ),
  假定網絡版本庫為 svn://192.168.1.100/MyProject.

2. 初始化

  在 c:\svnlib 下創建目錄 svklib (目錄名隨便你定義)
  在 c:\svnlib\svklib 使用 TortoiseSVN 右鍵在此創建版本庫(注意:這一步是鏡像的基礎!因為SVK用的就是SVN的版本庫)

  SVK是默認在 "C:\Documents and Settings\當前用戶名\.svk\Local" 創建鏡像倉庫的,所以需要先把鏡像倉庫位置重定位到你需要的位置( 當然, 如果妳喜歡默認的位置, 那你可以跳過這一步 ) 

  svk depotmap --relocate // c:\svnlib\svklib

  上面這行命令有一個概念, 就是depot-map -- 倉庫表, 妳可以使用svk depotmap 建立多個鏡像倉庫, 而不重定位, 這裡為了方便解說並盡量減少旁枝末節的繁雜概念問題而直接把默認位置重定位了. "//" 是一個倉庫名, 類似於Linux的那個根目錄, SVK把默認路徑當作根目錄, 所有的鏡像倉庫均建立在根目錄以上.

  妳用 svk depotmap --list 命令就可以看到SVK的根目錄被定位到 c:\svnlib\svklib 下了

  接下來我們建立一個鏡像目錄.
  我們必須建立一個鏡像目錄, 因為所有提交到此鏡像目錄的操作均被認為提交到網絡上的原始版本庫!!!

  下面這裡的 "-m test" 是設定此次操作的提交註釋,具體的詳情請參考SVK的幫助。

  svk mkdir //mirror -m test

3. 日常使用

  镜像! 把網絡版本庫鏡像下來.

  svk mirror svn://192.168.1.100/MyProject //mirror/MyProject

  同步! 注意: 這裡不需要再輸入那個網絡路徑了, 網絡路徑在上面進行鏡像時會記錄下來的!

  svk sync //mirror/MyProject

  成功!

  由於對鏡像目錄進行修改即相當於直接提交到網絡版本庫, 因此不能直接對鏡像版本庫進行修改, 所以必須新建一個本地的挎貝(分枝)! 注意!! 是必須!!

  svk mkdir //local
  svk cp //mirror/MyProject //local/MyProject

  接下來妳就可以使用TortoiseSVN的功能方便地對你剛才分枝下來的版本(//local/MyProject 即 svn://localhost/svklib/local/MyProject )進行取出\修改\提交了
  只是要記住, 妳所做的一切操作只能是修改妳的本地分枝, 即SVK源代碼目錄下面那個Local下的MyProject!

  當妳需要把修改提交到網絡原始數據庫時, 妳需要先更新鏡像目錄
  svk sync //mirror/MyProject

  再提交妳的代碼,此過程會自動 Merge 妳的修改到遠程版本庫。

  svk push //local/
MyProject

  記得, 修改鏡像庫時, 必須且只能使用SVK的方法, 否則更新不能被更新到網絡版本庫!

  各種關係及操作如下圖: 



0 意見: