首页 > 代码库 > 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#
命令:
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
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>