SVN 初步

      總是看到版本管理多麼重要多麼重要的,自己也想試一下到底是怎麼回事,上網一通搜索,發現其中兩個非常出名:CVS,SVN。 於是對比了一下,發現 SVN 的評價更加優秀,屬於後起之秀,有取代 CVS 之勢,所以就下載了 SVN 測試一下。

      SVN 的服務器及客戶端都有許多版本,主要的下載鏈接如下:

1:下載 SVN 服務器端,我們這裏下載官方的服務器最新版

      下載地址爲:http://subversion.tigris.org/files/documents/15/46531/Setup-Subversion-1.6.5.msi

      其中,頁面: http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100  提供了不同版本的服務器端

        我們這裏選擇 for Apache 2.2.x 的版本,當然可以不下載 msi 安裝版本,可以下載  svn-win32-1.6.6.zip效果是一樣的,只是免安裝版本需要在 windows 環境變量 PATH中添加 svn bin 目錄路徑,才能運行 svn 命令。不過,我在 win7 上測試的時候,也不知出現了什麼 bug, 免安裝版本無法創建服務,所以這裏還是下載 msi 安裝版。

2:下載 TortoiseSVN 客戶端,TortoiseSVN 與 windows 資料管理器相結合,操作非常方便,不愛敲命令的就下載這個版本吧。不過注意,如果用的是 64 位機器,務必要下載 64 位版,否則更本不能運行。

    32 位:http://downloads.sourceforge.net/tortoisesvn/TortoiseSVN-1.6.6.17493-win32-svn-1.6.6.msi?download  

      64 位: http://downloads.sourceforge.net/tortoisesvn/TortoiseSVN-1.6.6.17493-x64-svn-1.6.6.msi?download

      下載完安裝,可以不用重啓。但是有些功能必須重啓才能使用,不過鑑於我是初步試用,不可能用得着什麼高級功能,所以就沒有重啓。

3:SVN 最快速的入門,可以查看鏈接: http://www.subversion.org.cn/?action-viewnews-itemid-1 ,我這裏就不具體說了,總結一下過程及自己遇到的問題:

     1):建立版本庫,命令行輸入  >svnadmin create E:/SVN/jmr ,這一步可以使用 TortoiseSVN 圖形化完成:在目錄E:/SVN/jmr 下"右鍵->TortoiseSVN->Create Repository here...“, 然後可以選擇版本庫模式, 這裏使用默認即可, 然後就創建了一系列目錄和文件。

     2):啓動 SVN 服務器

     方法1:在命令行下輸入 >svnserve –d –r E:/SVN/jmr,還要關閉命令行窗口,否則 SVN 服務會停止運行。

      方法2:爲了避免每次開啓服務都要如方法1所示,非常麻煩,這裏可以將 SVN 服務與 Windows 服務綁定,並且設置其開機自動運行,這樣就不用每次在命令行使用方法1了,這裏使用 Windows 的 sc 命令:

         sc create SVNService binpath= "C:/Program Files (x86)/Subversion/bin/svnserve.exe --service -r E:/SVN/jmr" displayname= "SVNService" depend= Tcpip start= auto

       其中,binpath= 後面的內容爲 svnserve.exe 路徑, -r E:/SVN/jmr 爲剛纔上面創建的代碼庫要目錄,服務名稱起名爲 SVNService,這個可以自己起名,創建服務成功後,該名字會在 控制面版->管理工具->服務 中顯示出來。

     運行該命令,則創建 SVN 服務成功,然後使用 >net start SVNService 命令啓動服務,這一步也可以在 控制面版->管理工具->服務 中右鍵選擇屬性啓動。不過比較奇怪,我使用免安裝版本在我的 win7 64 機上創建服務後,無論如何都無法啓動成功,最後用了安裝版的成功了,也不知是什麼 bug,不過在 XP 上沒有發現任何問題。

     如果想刪除服務,使用命令> sc deleter  servicename 進行刪除。  

    3):配置用戶權限

      (1)進入 E:/SVN/jmr/conf,用記事本打開 svnserve.conf,修改:

          [general]
          anon-access = none       
          auth-access = write

          password-db = passwd

          authz-db = authz

      其中,# 號表示註釋,去掉 # 可使配置生效,需要注意的是,每一項配置的前面都不能留有任何空格,否則會出錯。anon-access = none  表示不充許匿名用戶訪問,設置成 read 則充許匿名用戶讀操作。 auth-access = write 表示授權用戶可以進行寫操作。 password-db = passwd 表示用戶及其密碼的存放文件,這裏可以修改成其它文件。如自己建立一個文件 passwd-me,然後修改成 password-db = passwd-me,則 SVN 服務器進行驗證的時候就會在 passwd-me 中進行驗證用戶,當然也可以將文件存入在別的目錄,只要這裏指定具體路徑即可。 authz-db = authz 表示用戶對代碼庫中目錄的訪問權限的設置文件。

    (2)打開文件 passwd,建立用戶如下,用戶 zcl,密碼爲514514,用戶 yang,密碼爲123123,用戶 sun,密碼爲 123123。

      [users]
      zcl = 514514
      yang = 123123
      sun = 123123

      (3)打開文件 authz,設置用戶對代碼庫中不同目錄的訪問權限。

    爲了目錄結構清晰,這裏先建立幾個目錄,在 E:/SVN/jmr/conf 中新建一目錄 users 用於存放不同用戶的私人目錄。建立如下 E:/SVN/jmr/users/zcl,E:/SVN/jmr/users/yang,E:/SVN/jmr/users/test。/users/zcl 爲用戶 zcl 的目錄,/users/yang 爲用戶 yang 的目錄,E:/SVN/jmr/users/sun 爲用戶 sun 的用戶,/users/test 用於測試。

     修改 authz 文件如下所示:

[groups]
admin = zcl
members = sun,yang

#[group] 爲建立用戶組,這裏組名可以隨便起,admin 組做爲管理員,用戶成員爲  zcl,組 member 成員爲 sun 和 yang

[/]
* =
@admin = rw

#其中,[/] 表示代碼庫根目錄,* =   後面什麼都沒有,表示其它用戶沒有任何權限, @admin = rw 表示組 admin 的成員對根目錄有讀寫權限。用戶對目錄的權限是繼承的,這裏設置 admin 組中成員對根目錄有讀寫權限,則 admin 組中的成員對根目錄下所有目錄都具有讀寫權限,於是用戶 zcl 對代碼庫中所有目錄都有讀寫權限。

[/users/test]
@members = rw
* =

#組 member 中的成員對 /users/test 目錄具有讀寫權限,其它用戶沒有任何權限。這裏 * = 放置的順序沒有影響。

#這裏比較奇怪,我還沒有仔細看 SVN 對目錄的控制權限,本來我以爲,上面在 [/] 設置了 admin 的權限後,這裏就不用設置了,結果表明, * = 會屏蔽掉所有其它人的權限。所以,如果設置了 * =  則必須對所有想要授權的用戶都列出來。這裏只有組 memeber 中的成員可以讀寫,admin 組無權限,所以還要在上面加上一條 @admin = rw *********************這回總算對權限設置有比較清晰的瞭解了。。。

[/users/yang]
* = r
yang = rw

[/users/sun]
* = r
sun = rw

[/users/zcl]
zcl = rw

#如上設置了每個用戶對自己的目錄具有讀寫權限,其中,其它人對 /usrs/yang  及 /users/sun 目錄具有讀權限。

#示例中還給出瞭如下更具體的設置權限方法:

[repository:/baz/fuz] ,但是,我使用 [jmr:/usrs/yang] 這種方式設置,卻無論如何都沒有成功,這個還得查看一下資料,到底該如何對具體的代碼倉庫設置不同的權限。************

4)進行測試,向代碼庫中導入代碼

    我在目錄 E:/test 中有一個文件 test.txt,在該目錄中右鍵->TortoiseSVN->Import...    然後在彈出的對話框中,在 URL of Repository 中輸入 svn://localhost/users/test,在下面的 Import message 中輸入導入消息,可以自己寫上有意義的信息。其中 svn://localhost/users/test 表示向代碼庫中的目錄 /users/test 中導入目錄 E:/test 中的所有文件。如果該操作在其它客戶機上操作,則要把 localhost 替換成服務器的 ip 地址。

     確定後,在彈出的對話框中輸入自己的用戶名和密碼,如果驗證成功,則最後會顯示成功。如果出現 Authorization failed,則表示該用戶對目錄 svn://localhost/users/test 沒有寫入權限。我在使用 [jmr:/usrs/yang] 設置的時候,結果除了管理員 zcl 都無法向代碼庫中導入文件,並且無法從代碼庫中導出。關於這種設置方法,我想是在創建代碼庫的方式不同,以後再研究。

5)測度導出代碼

     在客戶端任何目錄下運行右鍵->Checkout,在URL of repository中輸入svn://localhost/test,這樣我們就得到了一份工作拷貝,這裏得到了整個 test 目錄。修改得到的 test.txt 文件,然後然後右鍵->Commit...,這樣就將修改後的文件傳到了 SVN 服務器上。

     在 test.txt 上右鍵->TortoiseSVN->Show Log,這樣我們就可以看到我們對這個文件所有的提交。在版本1上右鍵->Compare with working copy,我們可以比較工作拷貝的文件和版本1的區別。

     比較常見的錯誤是:1. 沒有權限訪問,則 Authorization failed,這就需要在 authz 文件中具體設置。2. 用戶名配置文件中前面有空格,同樣會出現 Authorization failed 錯誤。3. 設置組成員時權限一定要注意, * = 會屏蔽掉其它所有用戶的訪問權限。

6):從 SVN 服務器代碼倉庫中刪除代碼,使用命令

              >svn delete svn://ip/users/test 

        #出現錯誤提示: svn:無法使用外部編輯器獲得日誌信息;考慮設置環境變量$SVN_EDITOR,或者使用--message(-m)或--file(-F)選項  
         svn:沒有設置SVN_EDITOR,VISUAL或EDITOR環境變量,運行時的設定中也沒有“editor-cmd”選項 
         解決方法: 在 我的電腦 中新建環境變量  SVN_EDITOR,設爲 notepad, 然後在命令行: svn delete svn://ip/users/tests  選擇 c 繼續,彈出一記事本,關閉後,執行成功。

         中間過程需要輸入服務器電腦管理員及操作用戶密碼,所以必須在 authz 中設置一個管理員,並設置對所有目錄都具有讀寫權限,否則無法完成刪除操作,會出現 access denied 錯誤。如果出現 svn: URL 'zcl' does not exist 這種錯誤,則表示 /users/zcl 目錄中還沒有導入過代碼。*******************

Windows 防火牆可能會阻止 SVN 服務器的運行,需要在本機打開3690端口。控制面板--網絡--防火牆 然後例外,添加端口 名稱svn,端口號:3690。

發佈了54 篇原創文章 · 獲贊 3 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章