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