版本控制之svn

 

1.SVN概述 2php

1.1什麼是 SVN 2html

1.2 SVN 工做原理 2mysql

1.3 Svn工做目錄說明 3linux

1.4 SVN 與GIT 的區別 3c++

2.SYN的安裝 4git

2.1安裝所須要的包 4web

2.2 新建一個目錄用於存儲svn全部文件 4sql

2.3 新建一個版本倉庫 4shell

2.4 初始化版本倉庫的目錄 5數據庫

2.5 添加用戶 5

2.6 修改用戶訪問策略 5

2.7 修改svnserve.conf文件,讓用戶策略配置生效 6

2.8 啓動服務器 6

2.9 測試服務器 6

3.配置SVN服務器的HTTP支持 8

3.1 轉換SVN服務器的密碼 8

3.2 修改httpd.conf,添加關於SVN服務器的內容 9

3.3 啓動httpd服務器 9

3.4 用瀏覽器訪問測試 9

4.SVNManager 10

4.1 安裝環境 10

4.2下載svnmanager,解壓並放置到/var/www/html 11

4.3 安裝VersionControl_SVN 11

4.4 httpd.conf文件添加內容,這麼作是爲了更加安全 11

4.5 建立svnmanager使用的mysql數據庫 11

4.6 配置svnmanager 13

4.7重啓mysql,httpd 14

4.8 訪問http://192.168.4.5/svnmanager進行測試 14

1. SVN 的常見操做 16

2. 各包說明 18

錯誤總結 19

1)提示沒有php-mbstring 19

2)語法錯誤 19

3裝包的時候提示有依賴關係 19

4SVNManager只有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             

spacer.gif

 

測試提交-->編輯一個test.shshell腳本用來測試提交

vim test.sh

svn add test.sh

Svn commit test.sh -m 「大路的測試shell腳本

spacer.gif

 

郵件提醒支持

1安裝Perl模塊Module :: Build

http://search.cpan.org/CPAN/authors/id/D/DA/DAGOLDEN/Module-Build-0.37_06.tar.gz

一共四個包,第一個就裝不上

spacer.gif

 

[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/ 進行測試,彈出如下頁面即成功

spacer.gif

 

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-servermysql

[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.linuxconfig.php.win,分別針對LinuxWindows操做系統下的配置模板。初始化初始用戶名稱爲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包問題:網上下了兩本版本,仍是隻有一項

相關文章
相關標籤/搜索