版本控制之svn

 

1.SVN概述 2

1.1什麼是 SVN 2

1.2 SVN 工作原理 2

1.3 Svn工作目錄說明 3

1.4 SVN 與GIT 的區別 3

2.SYN的安裝 4

2.1安裝所需要的包 4

2.2 新建一個目錄用於存儲svn所有文件 4

2.3 新建一個版本倉庫 4

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包問題:網上下了兩本版本,還是隻有一項

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章