Subversion版本库的配置和使用-软件架构1
Apache与Subversion的配置:
下载Apache:http://httpd.apache.org/download.cgi#apache22
下载Subversion: http://sourceforge.net/projects/win32svn/files/
注意: Apache和Subversion有版本的兼容性限制,如果下载的是不对应的版本,会因版本不兼容而无法正常使用。
我们采用的是apache_2.2.21和subversion-1.6.15。
安装完apache_2.2.21后将可看到如下图标:
Subversion的安装和配置:
安装: 运行Subversion安装程序,并根据指导安装。
注:如果你先安装Apache,再安装Subversion,如果安装程序能够识别你已经安装了Apache,那么你的安装基本上就OK了。如果它不能,那么你需要做以下手工配置:进入Subversion的安装目录,找到文件mod_dav_svn.so和mod_authz_svn.so,然后使用如记事本之类的文本编辑器编辑Apache的配置文件,在LoadModule节的适当位置添加以下两行:
修改: 使用记事本之类的文本编辑器修改Apache的配置文件(安装目录\conf\httpd.conf),做出如下修改: 去掉如下几行的注释(删除'#'标记)
添加: 在配置文件的末尾添加如下几行:
注: 这个配置告诉Apache你的所有的Subversion版本库在物理上位于D:\SVN,版本库对外的URL是: http://MyServerIp/svn/ ,访问需要文件passwd中的用户/密码限制。
创建: 创建passwd文件,打开命令行提示符,来到apache目录,通过输入下面的命令创建文件: bin\htpasswd –c passwd username
如果需要再添加用户,则输入命令: htpasswd passwd username
注: 最后需用重启Apache
最后,你进入http://localhost/svn/,然后输入用户名密码后就可以看到如下页面:
TortoiseSVN客户端的安装:
下载TortoiseSVN: http://tortoisesvn.net/downloads.html
然后按提示安装完成,需重启电脑。
使用TortoiseSVN工具创建版本库:
创建一个新的文件夹,命名为SVNRepository;
右键点击新创建的目录,选择TortoiseSVN→Creat repository here...
导入数据到版本库:
组织好所需要导入的目录和子目录内的文件,选择命令TortoiseSVN→Import ...,它会弹出一个对话框:
这里表示将一个目录下的文件导入到版本库MyNewRepository中。
检出工作副本:
为了得到一个工作副本,需要进行从版本库检出的操作;选择一个存放工作副本的空目录。右键点击弹出右键菜单,选择SVN Checkout…命令。
将版本库MyNewRepository中的数据检出到Gethere目录中。
提交修改:
在提交之前要确保你的工作副本是最新的。你可以直接使用TortoiseSVN→Update,或者,你可以先使用TortoiseSVN→Check for Modifications修改看看哪些文件在本地或是服务器上已经有了改动。
如果你的工作复本是最新的,并且没有冲突,你就已经为提交做好准备了,选择你要提交的文件和/或文件夹,然后TortoiseSVN→ commit
版本库的基本操作:
添加新文件和目录: 如果在你的开发过程中你创建了新的文件或目录,那么你需要把他们加入你的版本控制中。选择那个文件或目录并使用TortoiseSVN→ Add。当你添加了指定的文件/目录到版本控制系统之后,这个文件上会出现一个added标志,这意味着你得先提交你的工作副本使该文件/目录对其他开发者来说成为有效的。
分支/标记: 版本控制系统的一个特性是能够把各种修改分离出来放在开发品的一个分割线上。这条线被称为分支。分支经常被用来试验新的特性,而不会对开发有编译错误的干扰。当新的特性足够稳定之后,开发品的分支就可以混合回主分支里(主干线)。版本控制系统的另一个特性是能够标记特殊的版本(例如某个发布版本),所以你可以在任何时候重新建立一个特定的构件和环境。这个过程被称作标记
其他操作: 撤销更改、清理、创建应用补丁、合并等等。
关于引自:http://blog.sina.com.cn/s/blog_538461ee0100a205.html
Subversion使用说明:
Subversion使用说明
环境:Windows 2003 172.25.0.248
Windows XP 172.25.23.46
Subversion 1.4.5
TortoiseSVN 1.4.5
Apache 2.0.61
1、安装
Subversion,TortoiseSVN,Apache安装都非常简单,Apache的安装目录在C:\Program Files\Apache Group\Apache2,TortoiseSVN安装在Windows XP上,作为客户端访问服务器,需要重新启动,客户端服务器都安装subversion和TortoiseSVN,这样可以互相测试
2 、subversion没有项目概念,它是创建一个档案库,在下面创建目录,目录相当于CVS对应的项目
创建档案库
svnadmin create c:/svn
3.svnserve方式运行
subversion服务器有两种方式运行,自带的svnserve方式,另外一种作为apache的扩展模块,使用apache来作为服务器,先介绍简单的svnserve方式
1)启动
svnserve -d -r c:/svn
远程客户机访问
svn list svn://172.25.0.248
这样可以看到档案库下面的目录,当然现在是空的
-r 是root的意思,是用来指定根目录,如果不指定,是当前目录,如果使用
svnserve -d 启动,svn list svn://172.25.0.248 会出现错误,
svn list svn://172.25.0.248/svn 这样才能正确访问
2)权限
权限定义放在档案库根目录下的conf下,共三个文件
svnserve.conf
passwd
authz
先观察一下svnserve.conf,这里有四行是需要管理的
# anon-access = read
# auth-access = write
# password-db = passwd
# authz-db = authz
# realm = My First Repository
定义如下
anon-access=read定义匿名用户的权限,默认是read,可以改成write,none,即写,或者没有任何权限,一般设置为none,避免匿名访问
auth-access = write,这个也可以设置为read,none,不过不大可能这么设置
password-db=passwd 指定了用户名密码文件,可以在passwd文件中设置用户名密码
realm = My First Repository 这一行不要做修改
修改svnserve.conf文件,如下
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz
realm = dev-test
要去掉行首的空格,切记
此时在客户段匿名访问,就会提示密码
svn list svn://172.25.0.248 #服务器端svnserve -d -r c:/svn
我们在passwd文件中增加用户名密码,密码格式是 用户名=密码
修改如下
[users]
test=test
hello=world
现在就可以输入test/test,hello/world来登陆系统
3)常用操作
用命令操作太麻烦了,用TortoiseSVN来操作,第一次操作会提示用户名密码,用上面设置的输入既可
subversion没有项目概念,只是管理目录
导入项目
选定文件夹,右键,TortoiseSVN,Import,将选择的文件导入,一个文件夹就导入了subversion
导出:右键,SVN Checkout
增加:右键,TortoiseSVN,add
提交:右键,SVN commit
更新:右键,SVN Update
4)权限进阶
假设情况如下开发人员stone,john,rose,测试人员jone,smith,brown,分为两个组dev,test,目录有两个dev,test,可以互相读取对方的目录,但是只能写自己的目录,all组包括test,hello,可以读取和写入所有目录
修改svnserve.conf,取消认证用户的统一权限,在authz中定义
#anon-access = none
#auth-access = write
password-db = passwd
realm = dev-test
修改passwd文件
[users]
test=test
hello=world
stone=stone
john=john
rose=rose
jone=jone
smith=smith
brown=brown
修改authz文件
[groups]
dev=john,stone,rose
test=jone,smith,brown
all=test,hello
[/]
@dev=r
@test=r
@all=rw
[/test]
@test=rw
[/dev]
@dev=rw
这样就可以限制访问权限,all组的用户拥有任何权限,dev组的只能读取所有的目录,但只能写dev目录,test也只能读取test目录,测试命令如下
svn import a
svn://172.25.0.248/a --username test --password test
svn import b
svn://172.25.0.248/c --username john --password john
svn import c
svn://172.25.0.248/c --username jone --password jone
可以看出只有test用户可以在根目录增加数据,通过
svn list
svn://172.25.0.248 --username test --password test
svn list
svn://172.25.0.248 --username john --password john
svn list
svn://172.25.0.248 --username jone --password jone
可以看出列表权限所有用户都有
类似的可以测试dev,test目录的相应权限
这样的权限设置,大多都够用了,如果需要多个档案库,可以将密码文件password-db,authz-db,指向一个文件,同时修改realm为同一个值,这个时候应该把多个档案库放在一个父目录下,如
svnadmin create
d:\svn\dev
svnadmin create
d:\svn\test
svnadmin create
d:\svn\doc
启动
svnserve -d -r d:\svn
访问
svn://172.25.0.248/dev,svn://172.25.0.248/test,svn://172.25.0.248/doc
目录权限要加上档案目录
[dev:/]
[test:/]
5)可以把svnserve包装为服务,如下
sc create svnserve binpath=
"\"C:\Program Files\Subversion\bin\svnserve.exe\" --service --root
c:\svn" displayname= "Subversion" depend= tcpip start= auto
net start Subversion
就可以正常访问了,系统重新启动,subversion也会重新启动
4、Apache 方式运行
Apache安装比较简单,安装路径为C:\Program Files\Apache
Group\Apache2,修改默认端口为803
1)拷贝C:\Program
Files\Subversion\bin下的mod_authz_svn.so,mod_dav_svn.so到C:\Program
Files\Apache Group\Apache2\modules
2)修改C:\Program Files\Apache
Group\Apache2\conf\http.conf,增加
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
3)创建档案库
svnadmin create e:/svn/test
4)配置权限
修改httpd.conf,增加
<Location /test>
DAV svn
SVNPath e:/svn/test
</Location>
重新启动Apache,就可以访问了,svn list
http://172.25.0.248:803/test
如果要配置多个版本库,可以使用父路径,如下
<Location /svn>
DAV svn
SVNParentPath e:/svn
</Location>
访问路径为http://172.25.0.248:803/svn/test
增加一个档案库,svnadmin create
e:/svn/admin,访问路径为http://172.25.0.248/svn/dev
这样配置无法匿名访问,好在我们可以配置权限
现在增加用户验证
创建密码文件
set path=%path%;C:\Program Files\Apache Group\Apache2\bin
E:\svn>htpasswd -c e:\svn\svn_apache_passwd.txt john
Automatically using MD5 format.
New password: ****
Re-type new password: ****
Adding password for user john
E:\svn>htpasswd e:\svn\svn_apache_passwd.txt jone
Automatically using MD5 format.
New password: ****
Re-type new password: ****
Adding password for user jone
创建了两个用户john/john,jone/jone,继续创建stone/stone,hello/world
修改httpd.conf
<Location /svn>
DAV svn
SVNParentPath e:/svn
AuthType Basic
AuthName "开发测试Subversion"
AuthUserFile
e:/svn/svb_apache_passwd.txt
Require valid-user
</Location>
这样可以通过ToroiseSVN或者svn命令来操作,和svnserve协议是一样的
svn import x http://172.25.0.248/test/x -m x
5)权限进阶
修改http.conf,
<Location /svn>
DAV svn
SVNParentPath e:/svn
AuthzSVNAccessFile e:/svn/svn_apache_access.txt #增加目录权限管理
AuthType Basic
AuthName "开发测试Subversion"
AuthUserFile
e:/svn/svn_apache_passwd.txt
Satisfy Any
#允许匿名访问
Require valid-user
</Location>
创建svn_apache_access.txt
[dev:/]
john = rw
stone = rw
jone = r
hello = r
[test:/]
john = r
stone = r
jone = rw
hello = rw
这样控制了john,stone可以读写dev档案库,读test档案库,jone,hello可以读写test档案库,读dev档案库
重新启动apache
#成功
svn import
test\t http://172.25.0.248:803/svn/dev/t --username stone
--password stone -m x
#收到错误
svn import
test\t http://172.25.0.248:803/svn/test/t --username stone
--password stone -m x
#成功
svn import
test\a http://172.25.0.248:803/svn/test/a --username hello
--password world -m x
#收到错误
svn import
test\a http://172.25.0.248:803/svn/dev/a --username hello
--password world -m x
Apache模式是比较好用的,可以通过浏览器来浏览subversion版本库,可以看到目录结构,或者还能简单的文件内容
5、现在来说,一个简单的subversion就可以配置和使用了,因为我是在windows上配置的,所以SSL的功能比较麻烦,等以后有空再研究吧,现在安全问题没有解决,无法部署到应用环境,这是下一步的事情,慢慢来。