在正式安装配置Subversion之前我们先来作点准备工作,由于我们以后会经常在命令行下执行命令,每次打开一个新的命令行窗口默认的当前目录都是C:"Documents and Settings"$UserName,这样在执行命令之前都要切换目录,很麻烦,所以我们先来解决这个问题。在“开始”-“运行”中输入“regedit”,打开注册表。找到"HKEY_CLASSES_ROOT"Folder"shell,如果没有shell,可以在Folder下新建一个名为shell的键,在shell下新建一个名为“命令行(Command Windows)”的键,在这个键之下再建一个新的名为“Command”的键,设置默认值为“cmd /K cd /d %L”。这样当我们选中一个目录,在右键上下文菜单里面就多了一个“命令行(Command Windows)”的选项,单击这个选项就可以打开一个命令行窗口并且快速切换到当前选中的目录。

一、软件下载:
apache: http://www.apache.org/ 下载最新的httpserver(apache2.2.x)
subversion: http://subversion.tigris.org/ (svn-win32-1.6.3.zip)
Windows常用客户端TortoiseSVN:http://tortoisesvn.net/downloads(TortoiseSVN-1.6.3)

二、软件安装
全部默认安装即可。
解决80端口的问题:修改apache_http_server2.2安装目录下conf目录下的httpd.conf文件,将listen 80 改成listen 81(或其他)。
用浏览器访问:http://localhost:81,显示It Works。

三、subversion配置
       Subversion有两种运行方式,一种是基于Apache Http Server,另外一种是Subversion Standalone Server。Apache Http Server是基于Apache Http Server的Subversion,这样做几个好处:
        A.能使用WebDAV协议。
        B.通过Apache以HTTP方式穿透防火墙,便于在互联网环境使用,能使用浏览器作为客户端工具浏览源码仓库。
        C.可以很容易的支持到SSPI(Windows域认证)和LDAP(AD?),这些都是Apache本身就支持的。
        D.能得到比较完善的Apache安全认证系统,比如SSL加密连接。

        第一步,打开Apache安装目录下的httpd.conf文件
        找到下面的语句:
       #LoadModule dav_module modules/mod_dav.so
       #LoadModule dav_fs_module modules/mod_dav_fs.so
       将上面语句前面的#去掉(注:可能已经被注释掉了)

         第二步,在这句后面追加,如下语句:
         LoadModule dav_svn_module "{svn安装目录}/bin/mod_dav_svn.so"
         LoadModule authz_svn_module "{svn安装目录}/bin/mod_authz_svn.so"
        注:{svn安装目录}就是svn-win32-1.6.3.zip解压后你放的目录(注:可能安装SVN时已经替你加上了)

        第三步,在这个文件的最后,追加如下语句:
        <Location /svn>
        DAV svn
         SVNParentPath d:/mysvnroot (这是svn父目录,创建的svn repository一定要在改目录下,且斜杠不能写反了!)
       </Location>

        第四步,配置环境变量,以便在命令行下使用apache和svn命令
        将apache安装目录的bin路径和subversion安装目录下的bin路径加到path环境变量中。如:;{apache安装目录}/bin ;{svn安装目录}/bin

        第五步,创建仓库
        根据apache的配置文件的设置建立目录:d:/mysvnroot,然后用svnadmin create d:/mysvnroot/test命令创建仓库,命令执行成功之后,会在d:/mysvnroot/test下面生成很多的文件和目录。(也可以新建一个文件夹,右击tortoiseSVN>create repository here...)

        第六步,运行
        重新启动Apache Server
        在浏览器中输入网址:http://localhost/svn/test/
        这时候,看到页面显示:
        Revision 0: /
        Powered by Subversion version 1.6.3 (r19776).
        安装成功,接下来将进行权限设置。

        第七步,svn使用apache的权限管理对档案库及目录进行读写管理
        修改上面第三步的内容为:

<Location /svn> 
    DAV svn
    #SVNListParentPath on
    SVNParentPath d:/mysvnroot
    ### apache auth begin
    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile d:/mysvnroot/passwd 
    Require valid-user
    ### apache auth end
    ### svn auth begin
    # our access control policy
    AuthzSVNAccessFile d:/mysvnroot/authz  
    # authentication if necessary
    #Satisfy Any
    ### svn auth end
</Location>

(passwd保存用户名和密码,这个文件需要用Apache的htpasswd工具创建,authz保存用户访问的权限策略)


       第八步,用htpasswd工具创建passwd 文件,建立保存用户名和密码的文件
        htpasswd -cm  d:/mysvnroot/passwd  zx
        zx为用户名,-c 表示创建文件,-m表示对密码用md5加密
        然后,会提示输入两次密码,以后再加用户就不需要用-c了,直接用-m即可。
        htpasswd -m d:/mysvnroot/ apache_authz yh
        然后,会提示输入两次密码
        删除用户:输入htpasswd -D passwd zx 回车

        下面建立控制用户访问权限的文件authz
        在d:/mysvnroot中新建一个记事本文件,文件名为authz,无后缀,输入下面的内容: 

[groups]
admin = zx
test-developers = yh
everyone = @test-developers
[test:/]  
@admin=rw                   //这表示,仓库test的根目录下的访问权限
@test-developers = r
[test:/test]             //test仓库下test目录的访问权限
@admin = rw
@test-developers = rw         // 如果在前面加上@符号,则表示这是个群组权限设置
表示读权限 w表示写权限

        (注意:贴代码时别把//注释贴了)
        第九步,配置完成,重新启动Apache server
        在浏览器地址栏中再次输入:http://localhost/svn/test/
        这次要输入密码才能进入。

        第十步,将一个项目文件夹导入到svn中
        右击要导入的文件夹,tortoiseSVN>import...
        键入地址:http://localhost/svn/test/
        如果设置了密码,则会要求输入用户名和密码

        第十一步,从svn中将项目checkout
        任意右击 SVN checkout...
        键入地址 http://localhost/svn/test/
        选择目的地址即可

        第十二步,解决冲突
        当多个人同时提交一个文件的修改时,可能产生冲突。
        冲突时,会生成三个临时文件,同时冲突的文件有感叹号标识。
        三个文件分别是:.mine(我的文件) .r版本号-1(前一个版本) .r版本号(当前最新版本)
        右击冲突文件; tortoiseSVN>Edit conflicts...
        修改后再提交即可。

        注意:基于基于Apache Http Server的Subversion的用户账号管理不同于subversion作为服务器的配置方法,基于apache的用户密码是加密的,应在命令行下创建。
        
        参考网址:http://bbs.jcwcn.com/viewthread.php?tid=239629