Subversion(簡稱SVN)是一個開源的版本控制系統,通過分支管理系統,可以高效管理隨時間改變的資料。本文介紹如何基於ECS部署和使用SVN。
準備工作
建立用於部署SVN的ECS執行個體,具體操作,請參見自訂購買執行個體。
該執行個體必須滿足以下條件:
部署SVN
SVN有HTTP和svnserve兩種訪問模式,兩種模式主要有以下區別。您可以根據業務需要,選擇以下其中一種部署方式。
功能 | HTTP模式 | svnserve模式 |
協議 | 使用HTTP協議進行通訊。 | 使用自訂的SVN協議進行通訊。 |
訪問方式 | 支援通過Web瀏覽器或者SVN用戶端進行訪問。 | 僅支援通過SVN用戶端進行訪問。 |
連接埠 | 使用80連接埠進行通訊。 | 使用3690連接埠進行通訊。 |
安全性 | 通過HTTPS進行加密通訊。 | 預設使用明文通訊,可以通過啟用加密選項進行加密通訊。 |
配置 | 需要在Web伺服器上進行配置。 | 需要在SVN伺服器上進行配置。 |
功能支援 | 支援更多的功能,比如許可權管理、日誌查看等。 | 相對簡單,功能較少。 |
部署HTTP訪問SVN
步驟一:安裝SVN
遠端連線安裝SVN的Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
運行以下命令,安裝SVN。
sudo yum install -y subversion
運行以下命令,查看SVN版本。
svnserve --version
當回顯類似如下所示時,說明SVN已安裝。
步驟二:安裝Apache
運行以下命令,安裝httpd。
sudo yum install httpd -y
運行以下命令,查看httpd版本。
httpd -version
返回下圖所示資訊時,表示httpd服務已安裝。
步驟三:安裝mod_dav_svn
mod_dav_svn是一個Apache HTTP伺服器的模組,用於提供SVN(Subversion)版本控制系統的Web訪問功能。
運行以下命令,安裝mod_dav_svn。
sudo yum install mod_dav_svn -y
步驟四:配置SVN
依次運行以下命令,建立SVN版本庫。
sudo mkdir /var/svn cd /var/svn sudo svnadmin create /var/svn/svnrepos
運行以下命令,將SVN倉庫的使用者組修改為apache。
sudo chown -R apache:apache /var/svn/svnrepos
依次運行以下命令,查看自動產生的版本庫檔案。
cd svnrepos ls
Subversion目錄說明如下表:
目錄
說明
db
存放所有的版本控制資料檔案。
hooks
放置hook指令檔。
locks
用來追蹤存取檔案庫的用戶端。
format
一個文字檔,檔案中只包含一個整數,表示當前檔案庫配置的版本號碼。
conf
SVN版本庫的設定檔(版本庫的訪問帳號、許可權等)。
運行以下命令,增加SVN版本庫的使用者和密碼。
SVN預設使用純文字密碼,而HTTP並不支援純文字密碼,所以需要單獨產生passwd檔案。本樣本中,增加使用者
userTest
,密碼設定為passWDTest
。請根據實際情況選擇並運行以下命令:如果您第一次增加使用者,運行命令時需要帶上參數
-c
組建檔案。sudo htpasswd -c /var/svn/svnrepos/conf/passwd userTest
如果您已經增加過使用者,當後續還需要增加使用者時,請運行以下命令。
sudo htpasswd /var/svn/svnrepos/conf/passwd userTest
根據提示設定使用者的密碼。
運行以下命令,進入conf目錄下。
cd /var/svn/svnrepos/conf/
設定帳號的讀寫權限。
運行以下命令,開啟許可權控制檔案。
sudo vim authz
按
i
鍵進入編輯模式。移動游標至檔案末尾,並添加如下代碼(其中,userTest表示帳號,r表示讀許可權,w表示寫入權限)。
[/] userTest=rw
按
Esc
鍵後,輸入:wq
儲存並退出檔案。
修改SVN服務配置。
運行以下命令,開啟SVN服務組態檔。
sudo vim svnserve.conf
按
i
鍵進入編輯模式。移動游標找到如下配置行,刪除行前面的注釋符#和空格。
說明每行不能以空格開始,且等號兩端要有一個空格。
anon-access = read auth-access = write password-db = passwd authz-db = authz realm = /var/svn/svnrepos
按
Esc
鍵後,輸入:wq
儲存並退出檔案。
運行以下命令,啟動SVN版本庫。
本文樣本中,啟動命令直接指定到版本庫。
sudo svnserve -d -r /var/svn/svnrepos/
說明運行
killall svnserve
命令可停止SVN服務。運行命令,查看SVN服務是否開啟。
ps -ef |grep svn
返回下圖所示資訊時,表示SVN服務已經開啟。
步驟五:配置Apache
運行以下命令,新增並編輯httpd設定檔。
sudo vim /etc/httpd/conf.d/subversion.conf
按
i
鍵進入編輯模式。在
subversion.conf
檔案中輸入以下配置資訊。<Location /svn> DAV svn SVNParentPath /var/svn AuthType Basic AuthName "Authorization SVN" AuthzSVNAccessFile /var/svn/svnrepos/conf/authz AuthUserFile /var/svn/svnrepos/conf/passwd Require valid-user </Location>
按
Esc
鍵後,輸入:wq
儲存並退出檔案。運行以下命令,啟動Apache服務。
sudo systemctl start httpd.service
部署svnserve訪問SVN
步驟一:安裝SVN
遠端連線安裝SVN的Linux執行個體。
具體操作,請參見通過密碼或密鑰認證登入Linux執行個體。
運行以下命令,安裝SVN。
sudo yum install -y subversion
運行以下命令,查看SVN版本。
svnserve --version
當回顯類似如下所示時,說明SVN已安裝。
步驟二:配置SVN
依次運行以下命令,建立SVN版本庫。
sudo mkdir /var/svn cd /var/svn sudo svnadmin create /var/svn/svnrepos
依次運行以下命令,查看自動產生的版本庫檔案。
cd svnrepos ls
Subversion目錄說明如下表:
目錄
說明
db
存放所有的版本控制資料檔案。
hooks
放置hook指令檔。
locks
用來追蹤存取檔案庫的用戶端。
format
一個文字檔,檔案中只包含一個整數,表示當前檔案庫配置的版本號碼。
conf
SVN版本庫的設定檔(版本庫的訪問帳號、許可權等)。
設定SVN版本庫的帳號和密碼。
運行以下命令,開啟使用者設定檔。
cd conf/ sudo vim passwd
按
i
鍵進入編輯模式。移動游標至
[users]
下,添加使用者帳號和密碼。說明添加帳號和密碼的格式為:帳號 = 密碼。例如,userTest(帳號) = passWDTest(密碼),如下圖所示(注意等號兩端要有一個空格)。
按
Esc
鍵退出編輯模式,並輸入:wq
儲存並退出。
設定帳號的讀寫權限。
運行以下命令,開啟許可權控制檔案。
sudo vim authz
按
i
鍵進入編輯模式。移動游標至檔案末尾,並添加如下代碼(其中,userTest表示帳號,r表示讀許可權,w表示寫入權限)。
[/] userTest=rw
按
Esc
鍵後,輸入:wq
儲存並退出檔案。
修改SVN服務配置。
運行以下命令,開啟SVN服務組態檔。
sudo vim svnserve.conf
按
i
鍵進入編輯模式。移動游標找到如下配置行,刪除行前面的注釋符#和空格。
說明每行不能以空格開始,且等號兩端要有一個空格。
anon-access = read auth-access = write password-db = passwd authz-db = authz realm = /var/svn/svnrepos
按
Esc
鍵後,輸入:wq
儲存並退出檔案。
運行以下命令,啟動SVN版本庫。
本文樣本中,啟動命令直接指定到版本庫。
sudo svnserve -d -r /var/svn/svnrepos/
說明運行
killall svnserve
命令可停止SVN服務。運行命令,查看SVN服務是否開啟。
ps -ef |grep svn
返回下圖所示資訊時,表示SVN服務已經開啟。
使用SVN
使用SVN管理代碼的常見流程為:
Checkout(您提取原始碼到本地)。
其他人修改並提交原始碼到Repository。
Update(您獲得最新的代碼)。
您修改並調試成功原始碼。
Commit(提交修改後的代碼到Repository,其他程式員即可看到您的修改)。
提取原始碼到本地(Checkout)
在本地Windows環境中下載並安裝TortoiseSVN用戶端。
在本地專案檔夾內的空白地區單擊滑鼠右鍵。
本樣本中,專案檔夾為
C:\Test
。在快顯功能表中,選擇SVN Checkout...。
填寫如下資訊後,單擊OK。
URL of repository:版本庫URL,原始碼統一存放的地址。
HTTP訪問模式:URL格式為
http://<ECS執行個體公網IP>/svn/<SVN版本庫名>
。svnserve訪問模式:URL格式為
svn://執行個體公網IP地址/
。說明當在版本庫的上層目錄啟動SVN服務時,SVN檢出的URL要對應加上版本庫的名稱。
Checkout directory:檢出到本地的目錄,本文樣本中,目錄為
C:\Test
。
說明第一次登入需要輸入帳號和密碼,即您在passwd檔案中設定的使用者名稱和密碼。
檢出完成樣本如下。
擷取更新(Update)
SVN服務端系統庫上的專案更新後,您可在本地專案檔空白處單擊右鍵,選擇SVN Update,即可自動完成下載最新專案,並會顯示所有更新內容。
在原專案檔夾內選擇SVN更新,會自動覆蓋原有內容。建議您先備份,再更新,防止自己原有的專案內容丟失。
提交修改(Commit)
完成以下操作,提交本地修改到服務端系統庫中。
在專案檔空白處單擊右鍵,選擇SVN Commit...。
輸入本次提交的版本更新資訊(所做修改的注釋),選中要提交的操作內容,單擊OK。
即可將本地專案提交到SVN伺服器資產庫,覆蓋資產庫專案從而實現更新。
說明如果發生提交衝突,即兩人都提交修改,後提交者由於版本落後會提交失敗。這時,您可以先備份自己的專案,然後從服務端下載最新的專案,並將自己的專案覆蓋到本地專案檔夾,再單擊SVN提交即可成功提交。
若您提交的專案中刪除了某個檔案,則會顯示如下圖所示的資訊。
還原檔案
完成以下操作,還原SVN中被刪除的檔案。
開啟本地專案檔夾,按右鍵選擇SVN Checkout...來檢出資料。
刪除其中一個檔案。
根據您是否已提交修改選擇相應的操作:
未提交時,按右鍵空白處,選擇
。已提交時,服務端系統庫中資料已得到同步,系統也會將其儲存的資料刪除。此時,您需要採取以下方法還原資料:
按右鍵空白處,選擇
查看動作記錄。在日誌中,單擊刪除的日誌行,下方會顯示已刪除的資料。
按右鍵已刪除的資料,然後單擊Save revision to...。
在儲存對話方塊,設定檔案名稱,單擊儲存(S),將已刪除的檔案儲存版本至刪除前的位置。
開啟原檔案夾,單擊SVN Commit...,即可同步檔案和系統庫中的資料。
常見問題
為什麼使用TortoiseSVN訪問SVN伺服器時服務串連,提示“主機沒有反應”?
出現“主機沒有反應”可能有以下原因:
SVN伺服器未啟動
安全性群組中未開放SVN伺服器所需連接埠
ECS執行個體開啟了firewalld防火牆,但是未允許存取SVN伺服器所需的連接埠
您可以按照以下步驟排查:
查看SVN服務狀態。
ps -ef |grep svn
返回下圖所示資訊時,表示SVN服務已經開啟。如果未返回以下資訊,請執行
sudo svnserve -d -r /var/svn/svnrepos/
啟動SVN服務。查看ECS執行個體所在安全性群組規則是否滿足SVN伺服器要求。
HTTP模式:開放22、80、443
svnserve模式:開放22、80、443、3690
查看firewalld防火牆
查看firewalld防火牆狀態。
sudo firewall-cmd --state
回顯資訊為
not running
說明firewalld防火牆未開啟,對SVN伺服器無影響。回顯資訊為
running
說明firewalld防火牆已開啟,請繼續執行下一步驟。
在firewalld規則中允許存取SVN伺服器所需連接埠(例如3690)。
sudo firewall-cmd --add-port=3690/tcp --per
重新載入
firewalld
服務配置,使配置生效。sudo systemctl reload firewalld