SVN
SVN是subversion的縮寫,是一個開放源代碼的版本控制系統,通過采用分支管理系統的高效管理,簡而言之就是用于多個人共同開發同一個項目,實現共享資源,實現最終集中式的管理。
SVN屬于C/S結構軟件,分為客戶端和服務器端
服務端軟件:VisualSVN
客戶端軟件:Tortoisesvn
網址:https://tortoisesvn.net/downloads.html
指令介紹
Checkout(檢出)
第一次與svn服務器聯系,并把項目更新到本地
- 鏈接到svn服務器端
- 更新服務器端數據到本地
注意Checkout只在第一次時才使用,其余若要更新數據則使用Update
Update(更新)
更新svn服務器代碼到本地
Commit(提交/上傳)
把代碼上傳到服務器
- 提交本地數據到服務器端
具體工作流程
軟件安裝
服務端軟件安裝(VisualSVN)
配置8443端口號、倉庫等設置后進行安裝
SVN服務端配置
-
創建一個項目
首先在SVN服務端創建一個公有目錄WebApp作為項目目錄
在WebApp目錄下創建Shop文件夾,作為Shop(版本倉庫)
-
創建版本倉庫,基本語法(DOS環境):
svnadmin create 項目名 文件夾路徑
Shop 倉庫目錄結構
1574954547749.png
-
進行服務端監管
客戶端輸入svn://localhost(或ip地址)可以訪問到相關數據倉庫(如示例的Shop倉庫)
要想要客戶端能訪問到數據倉庫,需要服務端啟用該倉庫的監管服務
svnserve -d -r 服務端的版本倉庫目錄
-d 在后臺運行
-r 監管目錄
-
權限控制
默認情況下,svn服務器是不允許匿名用戶上傳文件到服務器端的,要更改項目的相關配置文件。
anon-access = write # auth-access = write
讓auth-access屬性值為write,使該倉庫可讀可寫
SVN客戶端軟件安裝與使用
安裝完成后
- 在客戶端目標文件夾下右擊checkout
- 在彈出的窗口中輸入svn://服務器地址(也可以在URL of repository右面的目錄中檢查),點擊OK
- 如果當前文件夾下出現.svn/的隱藏文件夾,說明客戶端已經和服務器端建立起了聯系
項目經理創建項目
在有文件需要提交時,在當前文件夾下右擊選擇SVN Commit
- 進入窗口后填寫備注信息,選擇需要上傳的文件,然后點OK提交
-
出現以下界面,說明提交成功
1575043487030.png
程序員編寫項目
以上工作大部分是由項目經理完成的,程序員需要完成另外的操作
- 在文件夾下右擊進行檢出操作
-
如果有新文件要提交,直接右擊Commit(需要填寫備注信息和勾選文件)
一般以上指令是在模塊開發完畢后上傳
項目經理檢查進度
-
需要使用Update指令
一般直接右擊Update直接更新文件,系統會直接更新到最新版本
其他使用詳解
文件圖標
右擊---》 TortoiseSVN--》setting--》 Icon Overlays--》 Icon Set
- 1575085612459.png
常規圖標:當客戶端文件與服務器端文件完全同步
- 1575085684229.png
沖突突變:當客戶端提交的文件與服務器端數據有沖突
- 1575085853062.png
刪除圖標:當服務器端數據已刪除
- 1575085853062.png
增加圖標:當我們編寫的文件已添加到提交隊列
- 1575086033381.png
無版本控制圖標:當我們編寫的文件沒有添加到上傳隊列
- 1575086122515.png
修改圖標:當客戶端文件有修改但未提交
- 1575086175637.png
只讀圖標:當客戶端文件以只讀形式存在時
- 1575086222373.png
鎖定圖標:當服務器端數據已鎖定
- 1575086279764.png
忽略圖標:客戶端文件已忽略,不需要進行上傳
忽略文件
希望有一些文件不上傳到svn服務器,應該將該文件或該類型的文件添加至忽略列表
右擊文件--》 TortoiseSVN--》 Add to ignore list--》 選擇忽略的方式(忽略某個文件或某個類型的文件)
版本管理
版本回退
文件夾空白處右擊TortoiseSVN--》 Update to revision...--》
一般根據日志進行版本回退
解決版本沖突
在實際項目開發中,如果兩個人同時修改某個文件就會產生版本沖突問題
解決方法
合理分配項目開發時間
合理分配項目開發模塊
-
通過svn解決版本沖突問題
-
更新服務器端數據到本地(出現沖突后)
1575099451572.png
-
直接Update
沖突文件會出現其他的副本文件
? hello.java:整合后的hello.java文件
? hello.java.mine:沖突當事人修改后的hello.java文件
? hello.java.rx:代表x版本的文件,版本號低的一般代表起始狀態,版本號高的是其他人修改文件后的版本
- 刪除除hello.java以外的其他三個文件
- 修改整合hello.java文件
- 重新提交解決沖突
配置多倉庫與權限控制
配置多倉庫
在實際項目開發中,我們可能會同時開發多個項目,那么我們如何進行多項目監管呢?
如果通過svnserve進行倉庫監管,但是監管指令只能同時監管某一個文件夾,而不能同時監管多個倉庫。
答:可以通過監管WebApp總目錄來達到監管所有倉庫的目的
svnserve -d(后臺運行) -r(監管目錄) WebApp(項目總目錄的路徑)
此時svn://localhost或ip地址 是來訪問WebApp目錄的,如果需要訪問里面的Shop項目或者Wechat項目
Shop項目:svn://localhost/Shop
Webchat項目:svn://localhost/Wechat
權限控制
如果要使用權限控制功能,要有一個前提:必須首先開啟權限功能,在每一個倉庫中都有一個conf文件夾,里面有四個文件,其中
authz文件為授權文件,告訴哪些用戶具有哪些權限
passwd文件為認證文件,標識當前svn系統中某個倉庫具有哪些用戶以及相應的密碼
默認情況下,以上兩個文件都是禁用的,如需使用,首先要在svnserve.conf配置文件上開啟以上兩個文件
開啟步驟:
-
注釋匿名用戶的可讀可寫權限
給anon-access加上注釋
### users have read and write access to the repository. # anon-access = write # auth-access = write
-
開啟認證文件與授權文件
取消兩個注釋
password-db = passwd #一般在27行 authz-db = authz #一般在36行
-
編寫認證文件定義相關用戶名與密碼
打開passwd文件,等號左邊為用戶名,右邊為密碼
[users] # harry = harryssecret # sally = sallyssecret admin = admin888 itcast = 123456
-
編寫授權文件
打開authz文件
groups為用戶分組
[aliases] # joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average [groups] # harry_and_sally = harry,sally # harry_sally_and_joe = harry,sally,&joe # 組名 = 組員(組員間用“,”隔開) admin = admin itcast = itcast # [/foo/bar] # harry = rw # &joe = r # * = # [repository:/baz/fuz] # @harry_and_sally = rw # * = r [Shop:/] #Shop為項目文件夾名 @admin = rw #r為可讀,w為可寫 @itcast = r * = r #代表匿名用戶
-
測試
如果* = r時,所有用戶都能Checkout到項目,但當要提交修改時,會出現用戶驗證
1575101901427.png
此時可以輸入管理員賬號admin admin888,或者普通員工賬號itcast 123456
SVN服務的配置與管理
-
配置服務的自動啟動服務(開機自啟)
Window系統
創建系統服務
sc create 服務名稱 binpath= "服務的可執行文件 --service -r WebApp的路徑"start= auto(binpath=和start=后面都要帶上一個空格)
sc create SVNService binpath= "svnservice安裝目錄\bin\svnserve.exe --service -r WebApp的路徑" start= auto
-
配置批處理文件
Window系統(SVNService為服務名稱)
-
創建stop.bat文件
net stop SVNService
-
start.bat文件
net start SVNService
-
delete.bat文件
sc delete SVNService
-
實際開發模擬
通過鉤子程序,讓svn服務器上的程序同步到web服務器
鉤子程序
所謂鉤子就是與一些版本庫事件觸發的程序,例如新修訂版本的創建,或是未版本化屬性的修改
默認情況下,鉤子的子目錄(版本倉庫/hooks)中包含各種版本庫鉤子的模板
post-commit.tmpl:事務完成后所觸發的鉤子程序
鉤子程序默認情況可以采用批處理指令或Shell指令來進行編寫
通過批處理指令編寫鉤子程序
-
指定svn服務器工作目錄
SET SVN="SVNService的安裝目錄\bin\svn.exe"
-
指定web服務器工作目錄
SET DIR="服務器端目錄"
-
通過update指令實時更新數據到DIR目錄中
SVN update %DIR%
-
編寫post-commit.bat文件(文件放在hooks文件夾內)
SET SVN="SVNService的安裝目錄\bin\svn.exe" SET DIR="服務器端目錄" SVN update %DIR%
-
使用步驟
- 在服務器目錄下通過svn服務更新項目
- 有人更新文件到svn服務器上,服務器上的文件也會更新