概述
SVN 全稱 SubVersion,是一個開放原始碼的版本控制系統,它的特點是操作簡單,支援跨平臺操作,支援版本回退
SVN 屬於 C/S 結構軟體,分客戶端和服務端:
- 服務端軟體:VisualSVN
- 客戶端軟體:TortoiseSVN
SVN 的工作原理如下,SVN 伺服器會把程式碼整合記錄每一次的改動歷史,開發人員通過以下基本命令便能與 SVN 伺服器完成互動:
- Checkout(檢出):當你手上沒有原始碼的時候,你需要從 SVN 伺服器 checkout 一份
- Update (更新):當你已經 checkout 一份原始碼, Update 可以讓你的本地原始碼和 SVN 伺服器的原始碼同步
- Commit(提交):當你已經修改了程式碼,就需要 Commit 到 SVN 伺服器
SVN 服務端安裝與配置
伺服器端軟體儲存與服務端,下載地址:https://www.visualsvn.com/downloads/
一直點選下一步,在選擇元件介面時,建議按照如圖:
選擇安裝位置和資料倉儲
SVN 服務端配置:
- 建立一個專案
- 首先在 SVN 服務端目錄建立一個公有目錄 WebApp 作為專案目錄
- 在 WebApp 目錄下建立專案資料夾,比如 Shop 資料夾,作為專案的版本倉庫
- 建立版本倉庫,基本語法:
svnadmin create [資料夾目錄]
- 進行伺服器端監管
- 通過指令:
svnserve -d -r [監管資料夾目錄]
監管專案 - 通過 SVN://localhost或者 IP 地址就可以直接指向 Shop 版本倉庫
- 通過指令:
- 許可權控制
- SVN 伺服器預設不允許匿名使用者上傳檔案到服務端
- 在專案資料夾找到 conf/svnserve.conf 修改配置為:
anon-access:write
SVN 客戶端安裝與配置
SVN 客戶端下載地址:https://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%