全部產品
Search
文件中心

Elastic Compute Service:部署和使用SVN

更新時間:Sep 25, 2024

Subversion(簡稱SVN)是一個開源的版本控制系統,通過分支管理系統,可以高效管理隨時間改變的資料。本文介紹如何基於ECS部署和使用SVN。

準備工作

建立用於部署SVN的ECS執行個體,具體操作,請參見自訂購買執行個體

該執行個體必須滿足以下條件:

  • 執行個體已指派公網IP地址或綁定Elastic IP Address(EIP)。具體操作,請參見綁定EIP

  • 作業系統:Alibaba Cloud Linux 3、Alibaba Cloud Linux 2、CentOS 7.x。

  • 執行個體規格:部署SVN服務所需的執行個體規格與專案規格和團隊規模有關,建議您使用4 vCPU、4 GiB以上的執行個體規格。

  • 執行個體安全性群組的入方向規則已允許存取22、80、443連接埠。具體操作,請參見添加安全性群組規則

    說明

    svnserve模式還需要允許存取3690連接埠。

部署SVN

SVN有HTTP和svnserve兩種訪問模式,兩種模式主要有以下區別。您可以根據業務需要,選擇以下其中一種部署方式。

功能

HTTP模式

svnserve模式

協議

使用HTTP協議進行通訊。

使用自訂的SVN協議進行通訊。

訪問方式

支援通過Web瀏覽器或者SVN用戶端進行訪問。

僅支援通過SVN用戶端進行訪問。

連接埠

使用80連接埠進行通訊。

使用3690連接埠進行通訊。

安全性

通過HTTPS進行加密通訊。

預設使用明文通訊,可以通過啟用加密選項進行加密通訊。

配置

需要在Web伺服器上進行配置。

需要在SVN伺服器上進行配置。

功能支援

支援更多的功能,比如許可權管理、日誌查看等。

相對簡單,功能較少。

部署HTTP訪問SVN

步驟一:安裝SVN

  1. 遠端連線安裝SVN的Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 運行以下命令,安裝SVN。

    sudo yum install -y subversion
  3. 運行以下命令,查看SVN版本。

    svnserve --version

    當回顯類似如下所示時,說明SVN已安裝。

    查看SVN版本

步驟二:安裝Apache

  1. 運行以下命令,安裝httpd。

    sudo yum install httpd -y
  2. 運行以下命令,查看httpd版本。

    httpd -version

    返回下圖所示資訊時,表示httpd服務已安裝。

    image.png

步驟三:安裝mod_dav_svn

mod_dav_svn是一個Apache HTTP伺服器的模組,用於提供SVN(Subversion)版本控制系統的Web訪問功能。

運行以下命令,安裝mod_dav_svn。

sudo yum install mod_dav_svn -y

步驟四:配置SVN

  1. 依次運行以下命令,建立SVN版本庫。

    sudo mkdir /var/svn
    cd /var/svn
    sudo svnadmin create /var/svn/svnrepos
  2. 運行以下命令,將SVN倉庫的使用者組修改為apache。

    sudo chown -R apache:apache /var/svn/svnrepos
  3. 依次運行以下命令,查看自動產生的版本庫檔案。

    cd svnrepos
    ls

    查看版本庫檔案

    Subversion目錄說明如下表:

    目錄

    說明

    db

    存放所有的版本控制資料檔案。

    hooks

    放置hook指令檔。

    locks

    用來追蹤存取檔案庫的用戶端。

    format

    一個文字檔,檔案中只包含一個整數,表示當前檔案庫配置的版本號碼。

    conf

    SVN版本庫的設定檔(版本庫的訪問帳號、許可權等)。

  4. 運行以下命令,增加SVN版本庫的使用者和密碼。

    SVN預設使用純文字密碼,而HTTP並不支援純文字密碼,所以需要單獨產生passwd檔案。本樣本中,增加使用者userTest,密碼設定為passWDTest。請根據實際情況選擇並運行以下命令:

    • 如果您第一次增加使用者,運行命令時需要帶上參數-c組建檔案。

      sudo htpasswd -c /var/svn/svnrepos/conf/passwd userTest
    • 如果您已經增加過使用者,當後續還需要增加使用者時,請運行以下命令。

      sudo htpasswd /var/svn/svnrepos/conf/passwd userTest

    根據提示設定使用者的密碼。

  5. 運行以下命令,進入conf目錄下。

    cd /var/svn/svnrepos/conf/
  6. 設定帳號的讀寫權限。

    1. 運行以下命令,開啟許可權控制檔案。

      sudo vim authz
    2. i鍵進入編輯模式。

    3. 移動游標至檔案末尾,並添加如下代碼(其中,userTest表示帳號,r表示讀許可權,w表示寫入權限)。

      [/]
      userTest=rw

      svn-4

    4. Esc鍵後,輸入:wq儲存並退出檔案。

  7. 修改SVN服務配置。

    1. 運行以下命令,開啟SVN服務組態檔。

      sudo vim svnserve.conf
    2. i鍵進入編輯模式。

    3. 移動游標找到如下配置行,刪除行前面的注釋符#和空格。

      說明

      每行不能以空格開始,且等號兩端要有一個空格。

      anon-access = read
      auth-access = write
      password-db = passwd
      authz-db = authz
      realm = /var/svn/svnrepos

      image

    4. Esc鍵後,輸入:wq儲存並退出檔案。

  8. 運行以下命令,啟動SVN版本庫。

    本文樣本中,啟動命令直接指定到版本庫。

    sudo svnserve -d -r /var/svn/svnrepos/
    說明

    運行killall svnserve命令可停止SVN服務。

  9. 運行命令,查看SVN服務是否開啟。

    ps -ef |grep svn

    返回下圖所示資訊時,表示SVN服務已經開啟。查看SVN服務狀態

步驟五:配置Apache

  1. 運行以下命令,新增並編輯httpd設定檔。

    sudo vim /etc/httpd/conf.d/subversion.conf
  2. i鍵進入編輯模式。

  3. 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>
  4. Esc鍵後,輸入:wq儲存並退出檔案。

  5. 運行以下命令,啟動Apache服務。

    sudo systemctl start httpd.service

部署svnserve訪問SVN

步驟一:安裝SVN

  1. 遠端連線安裝SVN的Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 運行以下命令,安裝SVN。

    sudo yum install -y subversion
  3. 運行以下命令,查看SVN版本。

    svnserve --version

    當回顯類似如下所示時,說明SVN已安裝。

    查看SVN版本

步驟二:配置SVN

  1. 依次運行以下命令,建立SVN版本庫。

    sudo mkdir /var/svn
    cd /var/svn
    sudo svnadmin create /var/svn/svnrepos
  2. 依次運行以下命令,查看自動產生的版本庫檔案。

    cd svnrepos
    ls

    查看版本庫檔案

    Subversion目錄說明如下表:

    目錄

    說明

    db

    存放所有的版本控制資料檔案。

    hooks

    放置hook指令檔。

    locks

    用來追蹤存取檔案庫的用戶端。

    format

    一個文字檔,檔案中只包含一個整數,表示當前檔案庫配置的版本號碼。

    conf

    SVN版本庫的設定檔(版本庫的訪問帳號、許可權等)。

  3. 設定SVN版本庫的帳號和密碼。

    1. 運行以下命令,開啟使用者設定檔。

      cd conf/
      sudo vim passwd
    2. i鍵進入編輯模式。

    3. 移動游標至[users]下,添加使用者帳號和密碼。

      說明

      添加帳號和密碼的格式為:帳號 = 密碼。例如,userTest(帳號) = passWDTest(密碼),如下圖所示(注意等號兩端要有一個空格)。

      svn-3

    4. Esc鍵退出編輯模式,並輸入:wq儲存並退出。

  4. 設定帳號的讀寫權限。

    1. 運行以下命令,開啟許可權控制檔案。

      sudo vim authz
    2. i鍵進入編輯模式。

    3. 移動游標至檔案末尾,並添加如下代碼(其中,userTest表示帳號,r表示讀許可權,w表示寫入權限)。

      [/]
      userTest=rw

      svn-4

    4. Esc鍵後,輸入:wq儲存並退出檔案。

  5. 修改SVN服務配置。

    1. 運行以下命令,開啟SVN服務組態檔。

      sudo vim svnserve.conf
    2. i鍵進入編輯模式。

    3. 移動游標找到如下配置行,刪除行前面的注釋符#和空格。

      說明

      每行不能以空格開始,且等號兩端要有一個空格。

      anon-access = read
      auth-access = write
      password-db = passwd
      authz-db = authz
      realm = /var/svn/svnrepos

      image

    4. Esc鍵後,輸入:wq儲存並退出檔案。

  6. 運行以下命令,啟動SVN版本庫。

    本文樣本中,啟動命令直接指定到版本庫。

    sudo svnserve -d -r /var/svn/svnrepos/
    說明

    運行killall svnserve命令可停止SVN服務。

  7. 運行命令,查看SVN服務是否開啟。

    ps -ef |grep svn

    返回下圖所示資訊時,表示SVN服務已經開啟。查看SVN服務狀態

使用SVN

使用SVN管理代碼的常見流程為:

  1. Checkout(您提取原始碼到本地)。

  2. 其他人修改並提交原始碼到Repository。

  3. Update(您獲得最新的代碼)。

  4. 您修改並調試成功原始碼。

  5. Commit(提交修改後的代碼到Repository,其他程式員即可看到您的修改)。

提取原始碼到本地(Checkout)

  1. 在本地Windows環境中下載並安裝TortoiseSVN用戶端

  2. 在本地專案檔夾內的空白地區單擊滑鼠右鍵。

    本樣本中,專案檔夾為C:\Test

  3. 在快顯功能表中,選擇SVN Checkout...

    snv-1

  4. 填寫如下資訊後,單擊OK

    • URL of repository:版本庫URL,原始碼統一存放的地址。

      • HTTP訪問模式:URL格式為http://<ECS執行個體公網IP>/svn/<SVN版本庫名>

      • svnserve訪問模式:URL格式為svn://執行個體公網IP地址/

        說明

        當在版本庫的上層目錄啟動SVN服務時,SVN檢出的URL要對應加上版本庫的名稱。

    • Checkout directory:檢出到本地的目錄,本文樣本中,目錄為C:\Test

    svn-2

    說明

    第一次登入需要輸入帳號和密碼,即您在passwd檔案中設定的使用者名稱和密碼。

    檢出完成樣本如下。svn-5

擷取更新(Update

SVN服務端系統庫上的專案更新後,您可在本地專案檔空白處單擊右鍵,選擇SVN Update,即可自動完成下載最新專案,並會顯示所有更新內容。

image.png

說明

在原專案檔夾內選擇SVN更新,會自動覆蓋原有內容。建議您先備份,再更新,防止自己原有的專案內容丟失。

提交修改(Commit

完成以下操作,提交本地修改到服務端系統庫中。

  1. 在專案檔空白處單擊右鍵,選擇SVN Commit...

    image.png

  2. 輸入本次提交的版本更新資訊(所做修改的注釋),選中要提交的操作內容,單擊OK

    即可將本地專案提交到SVN伺服器資產庫,覆蓋資產庫專案從而實現更新。

    image.png

    說明
    • 如果發生提交衝突,即兩人都提交修改,後提交者由於版本落後會提交失敗。這時,您可以先備份自己的專案,然後從服務端下載最新的專案,並將自己的專案覆蓋到本地專案檔夾,再單擊SVN提交即可成功提交。

    • 若您提交的專案中刪除了某個檔案,則會顯示如下圖所示的資訊。顯示刪除檔案

還原檔案

完成以下操作,還原SVN中被刪除的檔案。

  1. 開啟本地專案檔夾,按右鍵選擇SVN Checkout...來檢出資料。

  2. 刪除其中一個檔案。

  3. 根據您是否已提交修改選擇相應的操作:

    • 未提交時,按右鍵空白處,選擇TortoiseSVN > Revert...

      image.png

    • 已提交時,服務端系統庫中資料已得到同步,系統也會將其儲存的資料刪除。此時,您需要採取以下方法還原資料:

      1. 按右鍵空白處,選擇TortoiseSVN > Show log查看動作記錄。

      2. 在日誌中,單擊刪除的日誌行,下方會顯示已刪除的資料。

        image.png

      3. 按右鍵已刪除的資料,然後單擊Save revision to...

        image.png

      4. 在儲存對話方塊,設定檔案名稱,單擊儲存(S),將已刪除的檔案儲存版本至刪除前的位置。image.png

  4. 開啟原檔案夾,單擊SVN Commit...,即可同步檔案和系統庫中的資料。

常見問題

為什麼使用TortoiseSVN訪問SVN伺服器時服務串連,提示“主機沒有反應”?

image

出現“主機沒有反應”可能有以下原因:

  • SVN伺服器未啟動

  • 安全性群組中未開放SVN伺服器所需連接埠

  • ECS執行個體開啟了firewalld防火牆,但是未允許存取SVN伺服器所需的連接埠

您可以按照以下步驟排查:

  1. 查看SVN服務狀態。

    ps -ef |grep svn

    返回下圖所示資訊時,表示SVN服務已經開啟。如果未返回以下資訊,請執行sudo svnserve -d -r /var/svn/svnrepos/啟動SVN服務。查看SVN服務狀態

  2. 查看ECS執行個體所在安全性群組規則是否滿足SVN伺服器要求。

    1. HTTP模式:開放22、80、443

    2. svnserve模式:開放22、80、443、3690

  3. 查看firewalld防火牆

    1. 查看firewalld防火牆狀態。

      sudo firewall-cmd --state 
      • 回顯資訊為not running說明firewalld防火牆未開啟,對SVN伺服器無影響。

      • 回顯資訊為running說明firewalld防火牆已開啟,請繼續執行下一步驟。

    2. 在firewalld規則中允許存取SVN伺服器所需連接埠(例如3690)。

      sudo firewall-cmd --add-port=3690/tcp --per
    3. 重新載入firewalld服務配置,使配置生效。

      sudo systemctl reload firewalld