首页 > 代码库 > SubVersion版本控制

SubVersion版本控制

源自《Linux 运维之道》丁一明编著 一书的总结

三种访问方式

功能

Apache+DAV

Svnserve

Svnserve+SSH

认证

http基本认证、LDAP

支持md5

Ssh认证

权限

对版本整体设置,也可以指定设置权限

客队版本整体设置权限,也可以指定目录

仅对版本库整体设置权限

加密

支持ssl加密

支持ssh加密

日志

完善的apache日志

速度

设置

相对复杂

简单

相对简单

安装:

[root@localhost tcpcliserv]# yum -y install subversion

创建版本库,利用svnadmin工具

svnadmin:命令create 创建一个新的版本库

hotcopy 版本库热备份

lslocks 打印所有的锁

[root@localhost tcpcliserv]# mkdir /var/svn

[root@localhost tcpcliserv]# svnadmin create /var/svn/web_project

[root@localhost tcpcliserv]# mkdir /var/web_code

[root@localhost tcpcliserv]# touch /var/web_code/test

[root@localhost tcpcliserv]# svn import /var/web_code/ file:///var/svn/web_project/ -m "Initial Data"

Adding /var/web_code/test

Committed revision 1.

[root@localhost tcpcliserv]# svn list file:///var/svn/web_project

test

建立有效的认证机制以增强版本数据库的安全性

[root@localhost tcpcliserv]# vim /var/svn/web_project/conf/authz

[root@localhost tcpcliserv]# vim /var/svn/web_project/conf/passwd

[root@localhost tcpcliserv]# vim /var/svn/web_project/conf/svnserve.conf

[root@localhost tcpcliserv]# svnserve -d -r /var/svn/

其中authz文件,添加内容

[groups]

admins=harry,sally #定义组,组成员有harry和sally

[/] #对版本库根路径设置权限,可以设置为需要控制的路径

@admins=rw #admins组中的用户可读、可写权限

*=r #其他所有的人只读,权限可以设置为’r’只读,读写’rw’、无权限’ ‘

Passwd添加内容

[users]

harry = 123

sally = 123

svnserve.conf添加内容

[general]

anon-access=none

auth-access=write

password-db=passwd

authz-db=authz

real=My First Repository

启动服务器相应的进程

启动svnserve服务

-d 以守护进程方式运行svnserve

--listen-port=port 指定监听的端口,默认监听端口号为3690

-r root 为版本库指定一个虚拟路径,默认客户端要指定绝对路径访问库

[root@localhost tcpcliserv]# svnserve -d -r /var/svn/

Svn服务默认监听端口3690,注意要设置。同时要注意在authz文件中为目录设置权限,路径应该为[web_project:/]。

客户端访问

root@ubuntu:/home/tempal# svn co svn://192.168.118.253/project1 mine

svn: No repository found in ‘svn://192.168.118.253/project1‘

root@ubuntu:/home/tempal# svn co svn://192.168.118.253/web_project mine

认证领域: <svn://192.168.118.253:3690> f2093f5e-85b5-4222-ae8e-c7d091ab3536

“root”的密码:

认证领域: <svn://192.168.118.253:3690> f2093f5e-85b5-4222-ae8e-c7d091ab3536

用户名: harry

“harry”的密码:

-----------------------------------------------------------------------

注意! 你的密码,对于认证域:

<svn://192.168.118.253:3690> f2093f5e-85b5-4222-ae8e-c7d091ab3536

只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion

可以保存加密后的密码。请参阅文档以获得详细信息。

你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,

来避免再次出现此警告。

-----------------------------------------------------------------------

保存未加密的密码(yes/no)? yes

A mine/test

取出版本 1。

root@ubuntu:/home/tempal#

image

命令:

svn命令:客户端命令行工具

Svnlook命令:subversion检查工具

[root@localhost tcpcliserv]# svnlook author /var/svn/web_project/

Root

Svnserve+SSH服务器。

客户端需要使用ssh程序连接远程服务器的sshd服务,通过ssh认证机制验证账户身份后,再自动启动svnserve服务。所以服务器端不需要提前启动svn服务。

[root@localhost tcpcliserv]# mkdir /var/code2

[root@localhost tcpcliserv]# touch /var/code2/test

[root@localhost tcpcliserv]# svnadmin create /var/svn/web_project2

[root@localhost tcpcliserv]# svn import /var/code2 file://var/svn/web_project2 -m "Web code"

svn: Unable to open an ra_local session to URL

svn: Local URL ‘file://var/svn/web_project2‘ contains unsupported hostname

[root@localhost tcpcliserv]# svn import /var/code2 file:///var/svn/web_project2 -m "Web code"

Adding /var/code2/test

在客户端访问

Committed revision 1.

[root@localhost tcpcliserv]# service sshd start

[root@localhost tcpcliserv]# chkconfig sshd on

image

Apache+SVN服务器搭建

虽然前面两种服务器已经满足多数人的使用需求,但当客户端没有任何工具可以使用时,我们还可以创建基于Apache的SVN服务器,这样只要客户端有浏览器就可以访问版本库服务器。使用Apache Web Server访问版本库需要加载mod_dav和mod_dav_svn模块。

[root@localhost tcpcliserv]# gedit /etc/httpd/conf.d/subversion.conf

[root@localhost tcpcliserv]# chown -R apache.apache /var/svn

[root@localhost tcpcliserv]# chcon -R -t httpd_sys_content_t /var/svn

[root@localhost tcpcliserv]# htpasswd -c /var/svn/.pass jerry

New password:

Re-type new password:

Adding password for user jerry

[root@localhost tcpcliserv]# service httpd start

Starting httpd: httpd: Could not reliably determine the server‘s fully qualified domain name, using localhost.localdomain for ServerName

[ OK ]

[root@localhost tcpcliserv]# chkconfig httpd on

更改的/etc/httpd/conf.d/subversion.conf 内容如下:为了让Apache Web Server可以读取SVN版本中的数据,要确保mod_dav和mod_authz_svn两个模块会被加载。

LoadModule dav_svn_module modules/mod_dav_svn.so

LoadModule authz_svn_module modules/mod_authz_svn.so

#添加内容

<Location /svn>

#当用户的URL是以/svn开始(http://hostname/svn/...),Apache会将控制权交给DAV处理

DAV svn

SVNParentPath /var/svn

#通过SVNParentPath指定所有版本库的主目录(发布所有的版本库)

# Limit write permission to list of valid users.

# Require SSL connection for password protection.

# SSLRequireSSL

AuthType Basic #Apache认证方式

AuthName "Authorization Realm"#提示字符

AuthUserFile /var/svn/.pass#账户文件路径,为了安全,应该隐藏该文件

Require valid-user#设置仅为有效用户可以访问

</Location>

#除了上面两个模块,还要确保/etc/httpd/conf/httpd.conf文件中dav_module模块也会被加载

# Example configuration to enable HTTP access for a directory

# containing Subversion repositories, "/var/www/svn". Each repository

# must be both:

#

# a) readable and writable by the ‘apache‘ user, and

#默认Apache的启动用户为apache,所以需要apache用户对版本库有读写权限

# b) labelled with the ‘httpd_sys_content_t‘ context if using

#如果开启了SELinux,这版本库目录需要有httpd_sys_content_t安全上下文标签。

# SELinux

#

#

# To create a new repository "http://localhost/repos/stuff" using

# this configuration, run as root:

#

# # cd /var/www/svn

# # svnadmin create stuff

# # chown -R apache.apache stuff

# # chcon -R -t httpd_sys_content_t stuff

#

#<Location /repos>

# DAV svn

# SVNParentPath /var/www/svn

#

# # Limit write permission to list of valid users.

# <LimitExcept GET PROPFIND OPTIONS REPORT>

# # Require SSL connection for password protection.

# # SSLRequireSSL

#

# AuthType Basic

# AuthName "Authorization Realm"

# AuthUserFile /path/to/passwdfile

# Require valid-user

# </LimitExcept>

#</Location>

 

image

image