首页 > 代码库 > 版本控制之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
(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包问题:网上下了两本版本,还是只有一项
本文出自 “庭中有奇树” 博客,请务必保留此出处http://zhangdl.blog.51cto.com/11050780/1881880
版本控制之svn