SVN 學習筆記

概述

SVN 全稱 SubVersion,是一個開放源程式碼的版本控制系統,它的特點是操作簡單,支援跨平台操作,支援版本回退

SVN 屬於 C/S 結構軟體,分客戶端和服務端:

  • 服務端軟體:VisualSVN
  • 客戶端軟體:TortoiseSVN

SVN 的工作原理如下,SVN 伺服器會把程式碼整合記錄每一次的改動歷史,開發人員通過以下基本命令便能與 SVN 伺服器完成交互:

  • Checkout(檢出):當你手上沒有源程式碼的時候,你需要從 SVN 伺服器 checkout 一份
  • Update (更新):當你已經 checkout 一份源程式碼, Update 可以讓你的本地源程式碼和 SVN 伺服器的源程式碼同步
  • Commit(提交):當你已經修改了程式碼,就需要 Commit 到 SVN 伺服器

SVN 服務端安裝與配置

伺服器端軟體存儲與服務端,下載地址://www.visualsvn.com/downloads/

一直點擊下一步,在選擇組件介面時,建議按照如圖:

選擇安裝位置和數據倉庫

SVN 服務端配置:

  1. 創建一個項目
    1. 首先在 SVN 服務端目錄創建一個公有目錄 WebApp 作為項目目錄
    2. 在 WebApp 目錄下創建項目文件夾,比如 Shop 文件夾,作為項目的版本倉庫
    3. 創建版本倉庫,基本語法:svnadmin create [文件夾目錄]
  2. 進行伺服器端監管
    1. 通過指令:svnserve -d -r [監管文件夾目錄] 監管項目
    2. 通過 SVN://localhost或者 IP 地址就可以直接指向 Shop 版本倉庫
  3. 許可權控制
    1. SVN 伺服器默認不允許匿名用戶上傳文件到服務端
    2. 在項目文件夾找到 conf/svnserve.conf 修改配置為:anon-access:write

SVN 客戶端安裝與配置

SVN 客戶端下載地址://tortoisesvn.net/downloads.html

一直點擊下一步即可,安裝完成以後,使用客戶端連接 SVN 伺服器,在本地項目目錄右鍵,選擇 TortoiseSVN – 版本庫瀏覽器,輸入 SVN 伺服器地址,如 svn://localhost,由於設置了 SVN 伺服器監管 Shop 項目,所以會自動指向 Shop 項目

單擊檢出,就會自動檢出數據到客戶端,如果客戶端項目目錄出現了 .svn 隱藏目錄就代表成功了

開發人員通過更新拉取程式碼,在本地進行開發,在項目目錄右鍵 SVN 提交即可提交程式碼到服務端,和· Git 沒有太大差別

SVN 使用詳解

1. 圖標集

常規:客戶端文件與服務端文件完成同步

衝突:客戶端提交文件與服務端文件有衝突

已刪除:服務端文件已刪除

增加:客戶端文件已添加到提交隊列

無版本控制:客戶端文件沒有添加到提交隊列

修改:客戶端文件有修改但未提交

只讀:客戶端文件為只讀形式

鎖定:服務端文件已鎖定

忽略:客戶端文件不需要提交上傳

2. 版本衝突

在實際項目開發中,如果兩個人同時修改某個文件就會產生版本衝突。當發生衝突時,更新伺服器數據到本地,假設衝突文件為 index.php,則會產出以下文件:

  • index.php:系統自動整合後的 index.php 文件
  • index.php.mine:後提交者修改後的 index.php 文件
  • index.php.r6:index.php 後的 r6 代表版本號,不同的項目也不同,這裡表示 index.php 的起始狀態
  • index.php.r7:前提交者修改後的 index.pho 文件

要解決版本衝突,只需要刪除除 index.pho 以外的文件,修改 index.php 文件的內容,解決衝突再提交即可

3. 配置多倉庫

在 SVN 中一個項目就稱為一個倉庫,實際開發中,我們可能同時開發多個項目,這時需要進行多項目監管,可以通過監管 WebApp 總目錄來達到監管所有倉庫的目的

svnserve -d -r [WebApp目錄]

如果要訪問對應的項目,URL 也有變化:svn://localhost/Shop

4. 許可權控制

首先要開啟許可權功能,每一個倉庫中都有 conf 文件夾,裡面有兩個文件:

  • authz:授權文件,標識哪些用戶具有哪些許可權
  • passwd:認證文件,標識某個倉庫具有哪些用戶以及相應密碼

默認情況下,以上兩個文件都是禁用的,如需要使用,要在對應項目的 svnserve.conf 配置如下:

# 注釋匿名用戶的可讀寫許可權
# anno-access=write
# 開啟授權與認證文件
password-db=passwd
authz-db=authz

修改 passwd 文件,定義相關用戶和密碼

admin=admin888

修改 authz,設置分組

# 組名=用戶列表,用戶列表以逗號分隔
admin=admin
[Shop:/]
# 擁有可讀可寫許可權
@admin=rw
# 匿名用戶只有可讀許可權
*=r

5. 鉤子程式

所謂鉤子就是版本庫事件觸發的程式,例如新修訂版本的創建,或者未版本化屬性的修改,在版本倉庫的 hooks 目錄下包含各種版本庫鉤子模板,常用的鉤子程式有 post-commit.tmpl:提交完成後所觸發的鉤子程式

複製一份 post-commit.tmpl,刪除裡面的內容,重命名為 post-commit.bat,通過批處理指令編寫鉤子程式:

# 設置服務端svn路徑
SET SVN="D:\svn\bin\svn.exe"
# 設置web伺服器工作目錄
SET DIR="D:\server\apache\shop"
# 通過update指令實時更新數據到DIR目錄
SVN update %DIR%

Tags: