1.SVN概述 2php
1.1什麼是 SVN 2html
1.2 SVN 工做原理 2mysql
1.3 Svn工做目錄說明 3linux
2.SYN的安裝 4git
2.1安裝所須要的包 4web
2.3 新建一個版本倉庫 4shell
2.7 修改svnserve.conf文件,讓用戶策略配置生效 6
3.2 修改httpd.conf,添加關於SVN服務器的內容 9
4.2下載svnmanager,解壓並放置到/var/www/html下 11
4.4 向httpd.conf文件添加內容,這麼作是爲了更加安全 11
4.5 建立svnmanager使用的mysql數據庫 11
4.8 訪問http://192.168.4.5/svnmanager進行測試 14
(4)SVNManager只有User Admin這一項 20
1.SVN概述
1.1什麼是 SVN
SVN(Subversion)是一種開放源代碼的,跨平臺的集中式版本控制系統/版本控制工具,因爲其優於CVS的一些特色,獲得了愈來愈多人的關注和使用(目前有的企業用git稍微多些),支持可在本地訪問或經過網絡訪問的數據庫和文件系統存儲庫。不但提供了常見的比較、修補、標記、提交、回覆和分支等功能,並且Subversion 還增長了追蹤移動和刪除的能力。此外,它支持非 ASCII 文本和二進制數據,全部這一切都使Subversion 不只對傳統的編程任務很是有用,同時也適於 Web 開發、圖書創做和其餘在傳統方式下未採納版本控制功能的領域。
1.2 SVN 工做原理
SVN的工做原理是在一臺服務器上創建一個源代碼庫,庫裏能夠存放許多不一樣項目的源代碼或文件等。由源代碼庫管理員統一管理這些源程序。每一個用戶在使用源代碼庫以前,首先要把源代碼庫裏的項目文件下載到本地,而後用戶能夠在本地任意修改,最後用svn命令進行提交,由svn源代碼庫統一管理修改。這樣,只有一我的在修改文件同樣,既避免了衝突,又能夠作到跟蹤文件變化等。同時也能夠解決如下常見的問題:
(1)代碼管理混亂
(2)解決代碼衝突困難
(3)在代碼整合期間引起bug
(4)沒法對代碼的擁有者進行權限控制
(5)項目不一樣版本的發佈困難
(6)代碼/文件等備份功能
1.3 Svn工做目錄說明
路徑 | 類型 | 做用 |
conf | 目錄 | 這個倉庫的配置文件(用戶訪問賬號,權限等) |
format | 文件 | 只有一個整數,存放當前配置文件的版本號 |
dav | 目錄 | 供mod_dav_svn使用 |
db | 目錄 | 全部版本控制的數據存儲目錄 |
db/revprops | 目錄 | 記錄版本屬性 |
db/revs | 目錄 | 版本庫數據存儲真實目錄 |
db/fs-type | 文件 | 版本數據庫的真實存儲格式,有fsfs和bdb兩種存儲格式 |
db/uuid | 文件 | 存儲版本庫惟一標識符(可參考《svn版本庫uuid簡述》) |
hooks | 目錄 | 存放hook腳本文件的目錄,版本庫勾子目錄 |
locks | 目錄 | 存儲庫鎖目錄,用來跟蹤庫的來訪者 |
1.4 SVN 與GIT 的區別
SVN 集中式版本控制系統
Svn版本控制系統格式集中式的數據管理, 存在一箇中央版本庫,全部開發人員本地開發所使用的代碼都是來自於這個版本庫, 提交代碼也都必須提交到這個中央版本庫。
SVN 版本控制系統工做流程:
1. 在中央庫上建立或從主幹複製一個分支
2. 從中央庫checkout 下來這個分支的代碼
3. 增長本身的代碼文件, 修改現存的代碼或刪除代碼文件
4. Commit 代碼, 若是有人在剛剛的分支上提交了代碼, 你就會被提示代碼更新
5. 你須要先update 你的代碼後再提交。 Update 代碼的時候出現衝突, 須要解決衝突再進行提交。
SVN 的優缺點:
優勢:
1) 管理方便,邏輯清晰
2) 集中式管理,保證數據安全性
3) 代碼一致性高
4) 適合開發人數很少的項目開發
5) 普及度較高(逐步被git 代替)
缺點:
1) 依賴網絡,當沒法鏈接到中央版本庫的環境下, 沒法提交代碼中央版本庫的存儲作備份,(分佈式版本控制要好些)
2) SVN 備份須要備份全部代碼文件以及全部的版本記錄。
2.SYN的安裝
2.1安裝所須要的包
yum -y install subversion mysql-server httpd mod_dav_svn mod_perl
yum -y install wget gcc-c++ perl* ntsysv (make unzip)
2.2 新建一個目錄用於存儲svn全部文件
mkdir -p /home/svn/ //新建一個目錄用於存儲SVN全部文件
2.3 新建一個版本倉庫
svnadmin create /home/svn/daluPro
2.4 初始化版本倉庫的目錄
mkdir /daluPro /daluPro/server /daluPro/client /daluPro/test
//創建臨時目錄
svn import /daluPro/ file:///home/svn/daluPro -m 「初始化SVN目錄」
rm -rf /daluPro //刪除臨時創建的目錄,沒用的話刪除清空間
2.5 添加用戶
vim /home/svn/daluPro/conf/passwd
//打開文件後在文件中添加以下行,一個形如username = password的條目
dalu = zhang
server_group = server_group
client_group = client_group
test_group = test_group
2.6 修改用戶訪問策略
vim /home/svn/daluPro/conf/authz
[groups]
project_p = dalu
project_s = server_group
project_c = client_group
project_t = test_group
[daluPro:/]
@project_p = rw
* =
[daluPro:/server]
@project_p = rw
@project_s = rw
* =
[daluPro:/client]
@project_p = rw
@project_c = rw
* =
[daluPro:/test]
@project_p = rw
@project_s = rw
@project_c = rw
@project_t = rw
* =
以上信息表示,只有dalu有根目錄的讀寫權限,server_group能訪問server目錄,client_group能訪問client目錄,全部人均可以訪問test目錄
2.7 修改svnserve.conf文件,讓用戶策略配置生效
vim /home/svn/daluPro/conf/svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = /home/svn/daluPro/conf/passwd
authz-db = /home/svn/daluPro/conf/authz
2.8 啓動服務器
svn -d -r /home/svn
2.9 測試服務器
測試提取-->登陸以後按提示輸入相應的指令,當出現check out revision 1則測試 提取成功
svn co svn://192.168.4.5/daluPro
測試提交-->編輯一個test.sh的shell腳本用來測試提交
vim test.sh
svn add test.sh
Svn commit test.sh -m 「大路的測試shell腳本」
郵件提醒支持
1安裝Perl模塊Module :: Build
http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Module-Build-0.37_06.tar.gz
一共四個包,第一個就裝不上
[root@192,168,4,5 /]# tar zxf Module-Build-0.37_06.tar.gz
http://search.cpan.org/CPAN/authors/id/A/AP/APLEINER/Net-SMTP_auth-0.08.tar.gz
http://www.cpan.org/authors/id/D/DA/DAGOLDEN/Module-Build_11.tar.gz
http://www.cpan.org/authors/id/D/DW/DWHEELER/
3.配置SVN服務器的HTTP支持
3.1 轉換SVN服務器的密碼
因爲SVN服務器的密碼是明文的,HTTP服務器不支持,因此須要轉換成HTTP支持的格式。下面這個perl腳本能夠完成這個工做。Htpasswd創建和更新用於基本認證的存儲用戶/密碼的文本文件,若是htpasswd不能讀寫此文件,它返回一個出錯代碼,而不作任何修改
#!/usr/bin/perl
use warnings;
use strict;
open (FILE, "passwd") or die ("Cannot open the passwd file!!!\n");
open (OUT_FILE, ">webpasswd") or die ("Cannot open the webpasswd file!!!\n");
close (OUT_FILE);
foreach (<FILE>)
{
if($_ =~ m/^[^#].*=/)
{
$_ =~ s/=//;
`htpasswd -b webpasswd $_`;
}
}
3.2 修改httpd.conf,添加關於SVN服務器的內容
vim /etc/httpd/conf/httpd.conf
<Location /daluPro>
DAV svn
SVNPath /home/svn/daluPro/AuthType Basic
AuthName 「svn for daluPro」
AuthUserFile /home/svn/daluPro/conf/webpasswd
AuthzSVNAccessFile /home/svn/daluPro/conf/authz
Satisfy all
Require valid-user
</Location>
3.3 啓動httpd服務器
Service httpd restart
3.4 用瀏覽器訪問測試
192.168.4.5/daluPro/server/ 進行測試,彈出如下頁面即成功
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| svn |
| test |
+--------------------+
mysql> use svn;
mysql> show tables;
+-------------------+
| Tables_in_svn |
+-------------------+
| groupprivileges |
| groups |
| repo_descriptions |
| repositories |
| svnserve_pwd |
| userprivileges |
| users |
| usersgroups |
| usertickets |
+-------------------+
4.SVNManager
4.1 安裝環境
在以上的基礎,安裝下列包就能夠了
[root@192,168,4,5 ~]# yum -y groupinstall "PHP Support"
[root@192,168,4,5 ~]# yum -y install php-mysql php-mbstring
4.2下載svnmanager,解壓並放置到/var/www/html下
[root@192,168,4,5 html]# pwd
/var/www/html
[root@192,168,4,5 html]# ls
svnmanager-1.10.tar.gz
[root@192,168,4,5 html]# tar zxf svnmanager-1.10.tar.gz
[root@192,168,4,5 html]# ls
svnmanager-1.10 svnmanager-1.10.tar.gz
[root@192,168,4,5 html]# mv svnmanager-1.10 svnmanager
[root@192,168,4,5 html]# ls
svnmanager svnmanager-1.10.tar.gz
4.3 安裝VersionControl_SVN
--使用pear命令,pear工具會從服務器自動下載安裝
--也能夠本身下一份,直接拷貝到svnmanager目錄下也能夠用
[root@192,168,4,5 html]# /usr/bin/pear install --alldeps VersionControl SVN-0.3.4
[root@192,168,4,5 html]# mv /VersionControl_SVN-0.3.4/ . //本身下的拷過來
[root@192,168,4,5 html]# ls
svnmanager svnmanager-1.10.tar.gz VersionControl_SVN-0.3.4
4.4 向httpd.conf文件添加內容,這麼作是爲了更加安全
[root@192,168,4,5 html]# vim /etc/httpd/conf/httpd.conf
<Directory "/var/www/html/svnmanager/">
AllowOverride None
Order deny,allow
Deny from all
Allow from all
</Directory>
4.5 建立svnmanager使用的mysql數據庫
從官網下載RPM包
--http://dev.mysql.com.downloads/mysql/
--選擇適用於當前系統的bundle集合包
[root@192,168,4,5 mysql]# tar xvf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
[root@192,168,4,5 mysql]# ls
MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
MySQL-client-5.6.15-1.el6.x86_64.rpm
MySQL-devel-5.6.15-1.el6.x86_64.rpm
MySQL-embedded-5.6.15-1.el6.x86_64.rpm
MySQL-server-5.6.15-1.el6.x86_64.rpm
MySQL-shared-5.6.15-1.el6.x86_64.rpm
MySQL-shared-compat-5.6.15-1.el6.x86_64.rpm
MySQL-test-5.6.15-1.el6.x86_64.rpm
卸載系統自帶的mysql-server、mysql包
[root@192,168,4,5 mysql]# yum -y remove mysql-server mysql
[root@192,168,4,5 mysql]# mv /etc/my.cnf /etc/my.cnf.old
安裝相應的軟件包,推薦U升級安裝,可替換衝突文件
[root@192,168,4,5 mysql]# rpm -Uvh MySQL-shared-*.rpm
[root@192,168,4,5 mysql]# rpm -Uvh MySQL-server-5.6.15-1.el6.x86_64.rpm
[root@192,168,4,5 mysql]# rpm -Uvh MySQL-client-5.6.15-1.el6.x86_64.rpm
[root@192,168,4,5 mysql]# rpm -Uvh MySQL-devel-5.6.15-1.el6.x86_64.rpm
啓動MySQL數據庫服務器,設爲開機自啓,查看mysql狀態
[root@192,168,4,5 mysql]# /etc/init.d/mysql
[root@192,168,4,5 mysql]# chkconfig mysql on
[root@192,168,4,5 mysql]# netstat -anptu | grep mysql
tcp 0 0 :::3306 :::* LISTEN 5285/mysqld
Msyql初始化設置,修改口令
[root@192,168,4,5 mysql]# cat /root/.mysql_secret
# The random password set for the root user at Fri Nov 27 12:37:56 2015 (local time): YQPidyOT
[root@192,168,4,5 /]# mysql -u root -p
Enter password: YQPidyOT
mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('zhang');
爲SVNManager建立訪問用戶及數據庫
mysql> create database svn;
mysql> grant all on svn.* to svnmanager@localhost identified by "zhang";
mysql> flush privileges;
mysql> quit
4.6 配置svnmanager
svnmanager的配置文件在/var/www/html/svnmanager目錄下,有一個config.php.linux和config.php.win,分別針對Linux和Windows操做系統下的配置模板。初始化初始用戶名稱爲admin,密碼爲admin,此時你必須建立一個系統管理員,不然是看不到版本庫管理菜單的。建立管理員用戶後admin賬號失效。
[root@192,168,4,5 /]# cd /var/www/html/svnmanager
[root@192,168,4,5 svnmanager]# mv config.php.linux config.php
[root@192,168,4,5 svnmanager]# vim config.php
<?php
$htpassword_cmd = "/usr/bin/htpasswd";
$svn_cmd = "/usr/bin/svn";
$svnadmin_cmd = "/usr/bin/svnadmin";
$svn_repos_loc = "/home/svn/daluPro";
$svn_passwd_file = "/home/svn/daluPro/conf/passwd";
$svn_access_file = "/home/svn/daluPro/conf/authz";
$svn_trash_loc = "/var/svn/trash";
$svnserve_user_file="/home/svn/daluPro/conf/webpasswd";
$smtp_server = "smtp.mailserver.net";
$dsn = "mysql://svnmanager:zhang@localhost/svn";
$admin_name = "admin";
$admin_temp_password = "admin";
?>
4.7重啓mysql,httpd
[root@192,168,4,5 svnmanager]# service httpd restart
[root@192,168,4,5 svnmanager]# service mydql restart
4.8 訪問http://192.168.4.5/svnmanager進行測試
使用sdmin登陸後彈出如下畫面
點擊User Admin
功能項從上到下依次爲:邀請用戶、管理邀請、增長用戶、編輯用戶、刪除用戶
增長用戶
附1. SVN 的常見操做
1) 簽出
#svn checkout URL path
2) 簽出指定版本
#svn checkout –r rev URL
3) 簽出指定指定日期
#svn checkout –r 「{date}」 URL
4) 查看工做拷貝從哪裏來
#svn info path
5) 更新工做拷貝
#svn update
6) 添加文件到工做拷貝
#svn add path
7) 設置文件或者目錄的屬性
#svn propset propname propvalue path…
8) 編輯文件或者目錄的屬性
#svn propedit propname path
9) 列出文件或者目錄的屬性
#svn proplist path
10) 打印屬性的內容
#svn propget propname path
11) 刪除屬性
#svn propdel propname path
12) 啓用文件的關鍵字展開
#svn propset svn:keywords 「keywords」 file…
13) 忽略目錄中的某些文件
#svn propedit svn:ignore path…
14) 設置文件的行結尾風格
#svn propset svn:eol-style style path…
15) 設置文件的mime-type
#svn propset svn:mime-type mime-type path..
16) 標記文件爲可執行文件
#svn propset svn:executable true path…
17) 拷貝文件或者目錄
#svn copy source destination
18) 重命名文件或者目錄
#svn rename oldname newname
19) 移動文件或者目錄
#svn move source destination
20) 查看文件或者目錄的差別
#svn diff path
21) 比較文件的兩個版本
#svn diff –r rev1:rev2 file
22) 查看文件和項目倉庫中最新版本之間的差別
#svn diff –r HEAD file
23) 查看文件的最近的改動
#svn diff –r PREV:BASE file…
24) 提交文件
#svn commit –m 「message」 file
25) 查看文件的歷史
#svn log file
26) 查看目錄中最近的活動
#svn log path | more
27) 查看文件的詳細歷史記錄
#svn log –v file…
28) 檢查工做拷貝的狀態
#svn status
附2. 各包說明
Subversion SVN服務器
Mysql-server 用於codestriker
Httpd mod_dav_svn mod_perl 用於支持web方式管理snv服務器
Sendmail 用於配置用戶提交代碼後發郵件提醒
Wget gcc-c++ make unzip perl*必備軟件包
錯誤總結
(1)提示沒有php-mbstring包
裝包的時候發現沒有php-mbstring這個包,可是我看到的全部文檔都要求有這個包,而且我跳過這個的時候下一步也作不成功,只能找,網上下了個包以後,還有依賴關係,這時候我很崩潰,找不天不能用,最後我把但願寄託於centos6裏邊的包,配好yum以後,能夠了,成功安裝
(2)語法錯誤
這個是由於1014行,「」是漢語下的,應該改成英語下的,配置文件下的引號都應該是英文的。
(3)裝包的時候提示有依賴關係
好比在作郵件支持的時候,這個包只能從網上下,倉庫裏沒有,裝包的時候提示有依賴,只能按照提示下載每個依賴包並安裝。雖然有rpm --force強制安裝,但仍是推薦解決全部依賴關係。
(4)SVNManager只有User Admin這一項
狀態:未解決
可能緣由分析:
權限問題:我已經把全部的文件的屬主都設爲apache,apache應該有權限訪問
數據庫問題:查看數據庫以後,數據庫中確實有組這個表,應該不是數據庫問題
VersionControl包問題:網上下了兩本版本,仍是隻有一項