首页 > 代码库 > 版本控制之svn

版本控制之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             

技术分享

 

测试提交-->编辑一个test.shshell脚本用来测试提交

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-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包问题:网上下了两本版本,还是只有一项

 

 

 


本文出自 “庭中有奇树” 博客,请务必保留此出处http://zhangdl.blog.51cto.com/11050780/1881880

版本控制之svn