Subversion版本控制 html
1、簡介
2、svnserve
3、SSH+SVN
4、Apache+SVN
1、簡介:
Subversion是一款自由開放的版本控制軟件。Subversion能夠管理文件、文件夾以及記錄它們的修改情況。Subversion經常使用來幫助咱們管理軟件開發的源代碼或是公司手冊文檔。
Subversion經過將文檔導入至版本庫中進行管理,版本庫相似於文件服務器,但比文件服務器更強大的是它能夠記錄你每一次對文件或目錄的修改情況,並提供還原數據至老版本的功能。
版本控制概念圖: shell
Subversion框架圖: apache
從圖中能夠看出服務端保存着Subversion版本庫,客戶端經過命令或圖形界面鏈接服務端,並創建本地「工做拷貝」(從服務端將版本庫中的資料拷貝至本地)。
客戶端訪問服務端時能夠經過簡單的svnserve訪問、file本地訪問、Apache間接訪問。
1.svnserve是一個小巧、輕便的服務器程序,經過它客戶端可使用Subversion專有的協議進行訪問,其特色是設置簡單。
2.因爲svnserve自己並不提供加密通信的功能,因此若是你須要更安全的鏈接,可使用svnserve+ssh的方式,經過鏈接SSH服務器創建在SSH隧道,在經過SSH調用svnserve程序。
3.Apache經過mod_dav_svn訪問版本庫,使得客戶能夠經過訪問Apache取得版本庫資料進行版本控制。
Subversion服務器對比圖: vim
2、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後跟說明性字符串,可任意輸入。 centos
提示:這裏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 安全
- ...
- [general]
- # anon-access = read //匿名用戶權限爲只讀,此處能夠設置爲none,read,write
- # auth-access = write //通過認證的用戶權限爲可寫
- # password-db = passwd //指定用戶存放用戶名與密碼的文件,該文件位於conf目錄下名爲passwd
- # authzauthz-db = authz //指定基於版本庫路徑的訪問控制(能夠對文件或目錄設置權限)
- # real = My First Repository //設置版本庫域,若是兩個版本庫的認證域相同,他們將使用相同的密碼數據
- ...
- 提示:以上設置行默認所有爲註釋行,若是須要能夠根據本身的須要去除註釋。
下面咱們來看看passwd與authz文件格式:
[root@centos6 ~]# cat /var/svn/project1/conf/passwd 服務器
- ...
- [users]
- # harry = harryssecret //用戶名爲harry密碼爲harryssecret
- # sally = sallyssecret //用戶名爲sally密碼爲sallyssecret
- 提示:以上內容默認一樣爲註釋行,若是須要能夠去除#註釋,或是添加本身的新用戶與密碼。
[root@centos6 ~]# cat /var/svn/project1/conf/authz 網絡
- ...
- [groups]
- admins = harry,sally //定義組,組成員有harry與sally
- [/] //對版本庫根路徑設置權限,能夠設置爲你須要控制的路徑
- @admins = rw //admins組中的用戶用戶可讀,可寫權限
- * = r //其餘全部人只讀,權限能夠設置爲只讀('r'),讀寫('rw'),無權限('')
提示:若是你啓動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網站下載該程序。
效果如圖: 框架
3、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. 服務端建立版本庫
[root@centos6 ~]# mkdir /var/svn
[root@centos6 ~]# svnadmin create /var/svn/project1
[root@centos6 ~]# svn import /shells file:///var/svn/project1 -m "Initial DATA"
3. 客戶端訪問效果如圖:
1)經過TortoiseSVN圖形工具訪問:
2)經過命令行訪問(一臺rhel6.2系統)
4、Apache+SVN
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 ~]# svnadmin create /var/svn/project1
[root@centos6 ~]# svn import /shells file:///var/svn/project1 -m "Initial DATA"
[root@centos6 ~]# vim /etc/httpd/conf.d/subversion.conf
- LoadModule dav_svn_module modules/mod_dav_svn.so //加載模塊
- LoadModule authz_svn_module modules/mod_authz_svn.so //加載模塊
- # //#符號開頭的爲註釋行
- # a) readable and writable by the 'apache' user, and
- # //默認Apache啓動用戶爲apache,因此須要apache用戶對版本庫有讀寫權限
- # b) labelled with the 'httpd_sys_content_t' context if using
- # SELinux
- # //若是開啓了SELinux版本庫須要有httpd_sys_content_t這樣的安全上下文
- # To create a new repository "http://localhost/repos/stuff" using
- # this configuration, run as root:
- #
- # # cd /var/www/svn
- # # svnadmin create stuff
- # # chown -R apache.apache stuff
- # # chcon -R -t httpd_sys_content_t stuff //以上註釋行是配置文檔提供的操做示例
- //注意咱們的版本庫在/var/svn目錄下
- <Location /svn> //Location能夠根據特定的URL執行特定的處理
- //這裏當用戶的RUL以/svn開始時,將控制權交於DAV處理(http://hostname/svn/...)
- DAV svn
- SVNParentPath /var/svn //經過SVNParentPath指定全部版本庫的主目錄(發佈全部版本庫)
- //也能夠經過SVNPath指定某個特定版本庫的路徑(發佈特定版本庫)
- AuthType Basic //認證方式
- AuthName "Please Input passwod" //提示字符
- AuthUserFile /var/svn/.pass //賬號文件的路徑,爲了安全隱藏該文件
- Require valid-user //指定僅有效用戶能夠訪問
- </Location>
[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
客戶端訪問效果如圖: