天天看點

Subversion版本控制

Subversion版本控制

一、簡介

二、svnserve

三、SSH+SVN

四、Apache+SVN

一、簡介:

Subversion是一款自由開放的版本控制軟體。Subversion可以管理檔案、檔案夾以及記錄它們的修改狀況。Subversion常用來幫助我們管理軟體開發的源代碼或是公司手冊文檔。

Subversion通過将文檔導入至版本庫中進行管理,版本庫類似于檔案伺服器,但比檔案伺服器更強大的是它可以記錄你每一次對檔案或目錄的修改狀況,并提供還原資料至老版本的功能。

版本控制概念圖:

Subversion版本控制

Subversion架構圖:

Subversion版本控制

從圖中可以看出服務端儲存着Subversion版本庫,用戶端通過指令或圖形界面連接配接服務端,并建立本地“工作拷貝”(從服務端将版本庫中的資料拷貝至本地)。

用戶端通路服務端時可以通過簡單的svnserve通路、file本地通路、Apache間接通路。

1.svnserve是一個小巧、輕便的伺服器程式,通過它用戶端可以使用Subversion專有的協定進行通路,其特點是設定簡單。

2.由于svnserve本身并不提供加密通訊的功能,是以如果你需要更安全的連接配接,可以使用svnserve+ssh的方式,通過連接配接SSH伺服器建立在SSH隧道,在通過SSH調用svnserve程式。

3.Apache通過mod_dav_svn通路版本庫,使得客戶可以通過通路Apache取得版本庫資料進行版本控制。

Subversion伺服器對比圖:

Subversion版本控制

二、svnserve示例(本文環境為CentOS6.2):

    1. 安裝Subversion

    [root@centos6 ~]# yum -y install subversion

    2. 建立版本庫

提示:這裡計算機中提前有一個目錄/shells,裡面存放着公司的通用腳本,公司準備将其版本化。

    [root@centos6 ~]# mkdir /var/svn

    [root@centos6 ~]# svnadmin create /var/svn/project1

    //project1目錄将自動建立,并初始化版本庫,此時版本庫無版本檔案

    [root@centos6 ~]# svn import /shells  file:///var/svn/project1 -m "Initial DATA"

    //将shells目錄中的檔案導入版本庫,使其版本化。-m後跟說明性字元串,可任意輸入。

提示:這裡file:///var/svn/project1即通過本地通路版本庫,并導入資料至版本庫。

    此時,版本庫已經建立完成,并成功導入了我們的腳本檔案(工作中你可以導入自己的任何檔案)。但如果你需要通路版本庫卻僅可以通過本地file的方式通路,通路方法如下:

    [root@centos6 ~]# svn list file:///var/svn/project1/         //列出版本庫中的檔案清單

    [root@centos6 ~]# mkdir /test; cd  /test                     //建立本地拷貝目錄

    [root@centos6 ~]# svn checkout file:///var/svn/project1    //将版本庫中的檔案拷貝至本機

提示:在本機儲存一份本地拷貝後,以後即就當作普通檔案對其進行修改,修改完成後随時可以上傳回版本庫,更新版本庫。

      方法是:svn commit -m "Log"

    這裡我們需要的是客戶可以通過網絡從遠端通路版本庫,如上所述方法可以有多種,我們先看第一種簡單的svnserve方式。

    3. 啟動svnserve服務的方式

    [root@centos6 ~]# svnserve -d

     //作為守護程序啟動svnserve服務,預設監聽端口3690,如果有防火牆注意防火牆設定

     svnserve運作後,會将所有的版本庫釋出至網絡(如果有多個版本庫的話)

     用戶端需要指定據對路徑通路版本庫如svn://centos.example.com/var/svn/project1

    [root@centos6 ~]# svnserve -d -r /var/svn/project1      //限制僅釋出project1一個版本庫至網絡

    用戶端可以使用相對路徑通路版本庫如svn://centos.example.com/project1

    4. 認證與授權

    當用戶端通路版本庫時伺服器會讀取版本庫中的conf/svnserve.conf中定義的認證與授權政策實作權限控制。

    [root@centos6 ~]# cat /var/svn/project1/conf/svnserve.conf

    下面我們來看看passwd與authz檔案格式:

    [root@centos6 ~]# cat /var/svn/project1/conf/passwd

    [root@centos6 ~]# cat /var/svn/project1/conf/authz

   提示:如果你啟動svnserve時通過-r指定了版本庫,這是svnserve僅提供一個版本庫給網絡,對目錄設定權限時可以不指定版本庫的名稱。

    如果你啟動svnserve時為指定版本庫,即svnserve提供多個版本庫給網絡,這是設定路徑權限時需要指定版本庫的名稱。

    執行個體1:使用svnserve -d -r /var/svn/project1啟動Subversion服務,

           如果需要指定目錄設定權限路徑應該為[/]或[/test],即這裡的根(/)僅表示project1版本庫,/test表示project1下的test目錄。

    執行個體2:使用svnserve -d啟動Subversion服務,即釋出所有的版本庫至網絡,

           如果需要指定目錄設定權限路徑應該為[projet1:/]或[project2:/test],即這裡的[project1:/]僅表示project1版本庫的根,[project2:/test]表示project2下的test目錄。

    5. 用戶端通路:

    用戶端我們使用Windows下的TortoiseSVN圖形工具,可以在http://tortoisesvn.net/downloads.html網站下載下傳該程式。

    效果如圖:

Subversion版本控制
Subversion版本控制
Subversion版本控制
Subversion版本控制
Subversion版本控制

三、SSH+SVN示例

    這種模式需要提前設定SSH服務,通過SSH服務調用SVN服務程式,是以svnserve不需要手動啟動,用戶端通過svn+ssh://centos.example.com/svn/project1通路。

    用戶端程式通過ssh程式連接配接版本庫主機,使用SSH認證(伺服器系統使用者名與密碼),服務端接到某使用者的ssh連接配接後會以該使用者的身份啟動svnserve。

    這種模式svnserve.conf還是可以進行權限控制的。

    1. 服務端啟動SSH服務

    [root@centos6 ~]# service sshd start

    2. 服務端建立版本庫

    3. 用戶端通路效果如圖:

    1)通過TortoiseSVN圖形工具通路:

Subversion版本控制
Subversion版本控制
Subversion版本控制

    2)通過指令行通路(一台rhel6.2系統)

Subversion版本控制
Subversion版本控制

    Apache是非常流行的Web伺服器軟體。它可以運作在幾乎所有的計算機平台上。通過Apache釋出Subversion的版本庫,使得使用者可以通過HTTP協定通路版本庫。

    以下為使用Apache釋出Subversion版本庫的若幹理由:

    1.Subversion可以使用Apache自身內建的多種認證方式。

    2.不需要建立系統使用者。

    3.完善的Apache日志可。

    4.可以通過SSL加密網絡傳輸的資料。

    5.HTTP(S)可以穿越企業防火牆。

    6.堅定地通過浏覽器通路版本庫。

    準備工作:安裝Apache,加載mod_dav及mod_dav_svn子產品,Apache需要這兩個子產品管理Subversion版本庫。

    本文以yum方式安裝這些軟體,環境為CentOS6.2。

    [root@centos6 ~]# yum -y install httpd

    [root@centos6 ~]# yum -y install mod_dav_svn

    安裝完成後你可以通過以下方法檢視dav子產品是否加載成功:

    vim /etc/httpd/conf/httpd.conf

    檢視是否包含LoadModule dav_module modules/mod_dav.so

    vim /etc/httpd/conf.d/subversion.conf

    檢視是否包含LoadModule dav_svn_module modules/mod_dav_svn.so

    如果你還需要Subversion自帶的基于目錄的權限控制的話,可以通過加載mod_authz_svn實作。

    接下來通過修改Apache配置檔案實作網絡化版本庫:

    root@centos6 ~]# mkdir /var/svn

    [root@centos6 ~]# vim /etc/httpd/conf.d/subversion.conf

    [root@centos6 ~]# chown -R apache.apache  /var/svn/                //修改權限

    [root@centos6 ~]# chcon -R -t httpd_sys_content_t stuff /var/svn   //僅在SELinux開啟時使用

    [root@centos6 ~]# htpasswd -c /var/svn/.pass  jerry        //建立帳号檔案,并添加使用者jerry

    [root@centos6 ~]# service httpd start

    用戶端通路效果如圖:

Subversion版本控制
Subversion版本控制
Subversion版本控制
Subversion版本控制

繼續閱讀