SVN全称是SubVersioN。顾名思义,就是一个文件好多个子版本。也就是多人共同开发一个项目的时候可以用它来管理版本的变化以及记录每个人的修改。它是传统的CVS(Concurrent Versions System协同版本系统)软件的替代版本。

安装部分:
SVN有服务器端和客户端,服务器上建议两个都安装,服务器端没有GUI界面,在服务器上安装客户端可以方便管理。
CollabNetSubversion-server-1.5.6-2.win32.exe(服务器端)
TortoiseSVN-1.5.9.15518-win32-svn-1.5.6.msi(客户端)
LanguagePack_1.5.9.15518-win32-zh_CN.msi(客户端中文语言包)

安装服务器端的时候请注意,让你选择repository path的时候请慎重填写。这个安装完只能通过改注册表修改了。(或者卸载后重新安装)
那个选项指定了版本库所在目录,也就是发布的目录,以后可以在这个目录下建立多个版本库(也就是多库)。一般不要设置在C盘,因为以后数据量可能会比较大。设置好之后要记住,并把版本库建立在这个目录里面。
Apache服务器端口那个页面几个选项也建议考虑好再填,不过安装好后也可以通过修改httpd.conf修改。
如果80端口已经有了IIS,那么请把apache设置到别的端口,例如88
Repository Path第二次问的时候是用来设置apache的相关选项的,一般是和前一个目录一样的。(前面那个是svn协议,后面这个是apache的http、https等协议用的)
Repository Location Prefix是设置Http浏览的时候的前缀,默认是/svn也就是http://localhost:88/svn。当然,安装这个apache只是为了用SVN的话可以考虑设置成/,这样的话单库的时候直接输入域名,多库的时候输入http://localhost:88/project1就可以了。
其他的选项保持默认就可以了。安装程序会自动安装并建立两个服务,Apache 2.2和subversion Server

然后安装客户端
--------------------------------
基本配置部分:
首先建立你的版本库,如果你有多个项目,建议建立多库。否则可以直接把安装服务器端时设置的版本库目录设置为版本库。
假设你的Repository Path在E:\svn_repository,在这个目录下分别建立多个版本库,比如project1和project2
建立好目录后右键点击目录,选择TortoiseSVN->在此建立版本库(Create Repository Here)
这个是客户端的功能,点击后自动在目录里建立一堆目录什么的。
这样就建立好版本库了,下一步我们到各个版本库中设置相关的用户和权限。
进入E:\svn_repository的project1目录,找到conf目录,打开svnserve.conf
去掉#password-db = passwd前面的#注释,这句话的意思是告诉svn用户名和密码配置在passwd文件中
去掉#authz-db = authz前面的#注释,这句话的意思是指定这个版本库的相关读写授权在authz文件中
然后可以考虑修改anon-access = read这行,改为none。这行的意思是匿名用户也有读权限。改为none就比较安全了。
配置好这个文件后保存退出,再修改相同目录下的passwd文件。
建立相应的用户名和密码,格式如下:
[users]
test = test
user1 = 123456
左边是用户名,右边是密码,顺序写下所有的用户和密码就好了。
然后修改authz文件。这个文件用于指定此版本库每个用户和组的权限。格式如下:
[groups]
PM = ningxu,gangxiong
SE = dirk,yanzhu,jinzheng
Guest = guest,test
TE =
[/]
@PM = rw
@SE = r
[/trunk]
dirk = rw
在[groups]栏中,左边是组名,右边是成员(需要在passwd文件中定义),然后[/trunk]分别指定了不同目录的权限,[/]是根目录。
@代表一个组,不加@就是对个人赋予权限,读权限是r,写权限是w。注意,定义权限时出现的组一定要在[groups]里面有声明,否则无法启动subversion server服务。

然后就可以在客户端通过svn://ip/project1访问了(在本地目录或空白地方右键单击->TortoiseSVN->版本库浏览器Repo-Browser)

至此完成了SVN协议的配置,如果想用http协议访问,还需要修改apache的默认配置
找到服务器端程序的安装目录,进入apache的配置目录,一般在C:\Program Files\CollabNet Subversion Server\httpd\conf
打开httpd.conf文件
修改以下几个地方:
去掉
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule dav_module modules/mod_dav.so
前面的注释
在LoadModule节的最后添加以下两行:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
然后把文件末尾几行丰富一下
<Location /svn> #这个地方指定了svn版本库的http访问根目录,现在这样说明安装的时候选择Repository Location Prefix是/svn
DAV svn
SVNParentPath E:\SVN_repository #这里有两种表示方式,如果是SVNParentPath,说明所有库都是以这个为起始位置,方便但是不能单独配置每个版本库的用户密码和权限文件,多库的时候不建议这样用;第二种方式是SVNPath,需要分别指定每个单库,也就是要多个这样的<Location>模块
AuthType Basic #验证方式,直接弹出类似连接代理时询问用户名密码那样的窗口
AuthName "某某项目SVN控制中心" #这里指定了弹出验证窗口时的提示,建议根据具体情况填写
AuthUserFile E:\SVN_repository\conf\password.apache #Apache用户名和密码文件。注意,这里和SVN客户端那个不能通用!这个文件格式是user:password。之前没有[users],用户名和密码之间用“:”分隔,而不是“=”
AuthzSVNAccessFile E:\SVN_repository\conf\authz #这里的设置和SVN权限文件是一致的。
Require valid-user #这里表示需要验证才能访问
</Location>
以上的修改假设SVN的repository目录安装在E:\SVN_repository,并且把这个目录作为唯一的单库用TortoiseSVN建立了版本库。然后配置好了authz文件,并在conf目录建立了password.apache文件,格式是“用户名:密码”。

如果需要让SVN支持https访问请参考以下文章:
(下面附上的是包含了https支持的标准httpd.conf文件的配置)
ThreadsPerChild 250
MaxRequestsPerChild  0
ServerRoot "C:\Program Files\CollabNet Subversion Server/httpd"
Listen 88

LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
#LoadModule auth_digest_module modules/mod_auth_digest.so
#LoadModule authn_anon_module modules/mod_authn_anon.so
#LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authn_file_module modules/mod_authn_file.so
#LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule autoindex_module modules/mod_autoindex.so
#LoadModule cern_meta_module modules/mod_cern_meta.so
LoadModule cgi_module modules/mod_cgi.so
#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
#LoadModule deflate_module modules/mod_deflate.so
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
#LoadModule expires_module modules/mod_expires.so
#LoadModule file_cache_module modules/mod_file_cache.so
#LoadModule headers_module modules/mod_headers.so
LoadModule imagemap_module modules/mod_imagemap.so
LoadModule include_module modules/mod_include.so
#LoadModule info_module modules/mod_info.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
#LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
#LoadModule proxy_connect_module modules/mod_proxy_connect.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
#LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule negotiation_module modules/mod_negotiation.so
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
#LoadModule speling_module modules/mod_speling.so
#LoadModule status_module modules/mod_status.so
#LoadModule unique_id_module modules/mod_unique_id.so
LoadModule userdir_module modules/mod_userdir.so
#LoadModule usertrack_module modules/mod_usertrack.so
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

ServerAdmin localhost@localdomain
ServerName localhost:88

DocumentRoot "C:\Program Files\CollabNet Subversion Server/httpd/htdocs"

<Directory />
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Satisfy all
</Directory>
<Directory "C:\Program Files\CollabNet Subversion Server/httpd/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
<FilesMatch "^\.ht">
    Order allow,deny
    Deny from all
</FilesMatch>
ErrorLog logs/error.log
LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog logs/access.log common
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "C:\Program Files\CollabNet Subversion Server/httpd/cgi-bin/"
</IfModule>

<Directory "C:\Program Files\CollabNet Subversion Server/httpd/cgi-bin">
    AllowOverride None
    Options None
    Order allow,deny
    Allow from all
</Directory>

DefaultType text/plain

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

Include conf/ssl.conf

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

<Location /svn/test>
DAV svn
SVNPath E:\svn_repository\test
AuthType Basic
AuthName "『用于练习的测试SVN』"
AuthUserFile "E:\svn_repository\password.apache"
AuthzSVNAccessFile "E:\svn_repository\Test\conf\authz"
Require valid-user
</Location>

<Location /svn/BeijingMobile>
DAV svn
SVNPath E:\svn_repository\BeijingMobile
AuthType Basic
AuthName "『中国移动项目版本控制中心』"
AuthUserFile "E:\svn_repository\password.apache"
AuthzSVNAccessFile "E:\svn_repository\BeijingMobile\conf\authz"
Require valid-user
</Location>

--------------------------------------------
SSL方式访问配置:
如果你要更安全一些,可以配置ssl来保护你的服务器。
首先把以下文件保存为ssl.conf并放在apache的conf目录下
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
Listen 443
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl.crl
SSLPassPhraseDialog  builtin
SSLSessionCache         dbm:logs/ssl_scache
SSLSessionCacheTimeout  300
SSLMutex default
<VirtualHost _default_:443>
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile conf/ssl/my-server.cert
SSLCertificateKeyFile conf/ssl/my-server.key
<FilesMatch "\.(cgi|shtml|phtml|php3?)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "C:/Program Files/CollabNet Subversion Serve/httpd/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"


再打开Apache配置文件(httpd.conf),去掉这行的注释
#LoadModule ssl_module modules/mod_ssl.so
并且加上以下代码:
Include conf/ssl.conf(可以在# Secure (SSL/TLS) connections这行后面加)

Openssl需要一个配置文件。你可以从这里下载一个可工作的版本http://tud.at/programm/openssl.cnf
将它保存到bin/openssl.cnf。

下面你要创建一个SSL证书。你可以打开一个命令行窗口,然后cd到Apache安装目录(比如C:\Program Files\CollabNet Subversion Server\httpd\bin),敲入以下命令:
openssl req -config openssl.cnf -new -out my-server.csr
你将被问及一句口令短语。请注意,不要使用简单的几个词,而应该输入一整个句子,比如一篇诗词的一部份,越长越好。同样,你还要输入你的服务器URL。然后其它的问题都是可选问答的,不过我建议你也将它们填充。

下一步,敲入以下命令:
openssl rsa -in privkey.pem -out my-server.key
以及(注意,只有一行)
openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key -days 4000
这样将创建一个4000天后才过期的证书。最后敲入:
openssl x509 -in my-server.cert -out my-server.der.crt -outform DER
这些命令在Apache目录下创建了一些文件(my-server.der.crt, my-server.csr, my-server.key, .rnd, privkey.pem, my-server.cert)。将这些文件拷贝到目录conf/ssl
(比如C:\Program Files\CollabNet Subversion Server\httpd\conf\ssl),如果目录ssl不存在,你必须先创建一个。

重启Apache服务。

现在可以用类似这样的url来访问你的版本库了https://servername/svn/project

强制通过SSL来访问

当你配置了SSL来提高版本库安全时,你可能想禁用无SSL的http访问方式,而只允许通过https访问。要达到这种效果,你要在<Location>块加入另外一个指示器SSLRequireSSL。

一个示例<Location>块可能像这样:
<Location /svn>
DAV svn
SVNParentPath D:\SVN
SSLRequireSSL
AuthType Basic
AuthName "Subversion repositories"
AuthUserFile passwd
#AuthzSVNAccessFile svnaccessfile
Require valid-user
</Location>

文章版权:杜斟的个人博客 - 个人技术分享

本文链接:http://mcat.cc/index.php/archives/583/

转载请注明文章原始出处 !

添加新评论

返回顶部