zoukankan      html  css  js  c++  java
  • VS 2003 源码配置管理(subversion+apache)

    其实这文章是两三个月前写的,一直没有放上来,这段时间正好又换了配置服务器,所以才拿出来.
    这几天一直在找一个能与vs.net2003相结合的源代码管理工具,几乎试用过所有的大部分工具,难者难,易则简,今天准备安装subversion试试
    2.  下载 apache_2.0.53-win32-x86-no_ssl.msi
    3.  转到http://subversion.tigris.org  下载svn-1.1.3-setup.exe
    二 安装
    1.先安装Apache,如果你的IIS已经占用80端口,则在安装的时间请使用8080口,不过这个版本好像是自动选择,为安全起见,还是自己手动选择一下,避免冲突。假如我们选择8080端口,安装完后请打开http://127.0.0.1:8080如果安装成功的话,您将看到欢迎页。否则请检查安装是否正确.
     
    2.接着安装svn-1.1.3-setup.exe,这个版本可以选择是否要在apache的模块中自动配置,请选择自动配置。这样的话就不用手动修改配置文件了。
    不然的话要进行以下手动配置 

    1.      把 <Subversion_root>/httpd/目录下的 mod_dav_svn.so 和 mod_authz_svn.so Copy到 <Apache_root>/modules/ 目录下。
    2.      把 <Subversion_root>/bin/ 目录下的 libdb42.dll、libeay32.dll、以及 ssleay32.dll Copy到 <Apache_root> 底下的 bin 或 modules文件夹。
    3.      接着用记事本打开Apache HTTP Server 的 httpd.conf(在 <Apache_root>/conf/ 目录下),找到 LoadModule 指令,先找到以下兩行:
    #LoadModule dav_module modules/mod_dav.so
    #LoadModule dav_fs_module modules/mod_dav_fs.so
    把前面的 '#' 字元刪除,然后把下面几行文字加到这群 LoadModule 指令的后面:LoadModule dav_svn_module modules/mod_dav_svn.so
    LoadModule authz_svn_module modules/mod_authz_svn.so
    4.      重新启动 Apache HTTP Server。
     
     

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    注意:按理说,在配置apache的时候,如果80已经被IIS占了,我们选定8080口,但是这样反而不行,怎么办? 没关系按apache选80口,它会自动避开的80而选择8080的,这点很奇怪J
    3.设置subversion的仓库路径 
    l         设置URL路径 SVNPath
    其语法是:
       <Location /svn/repos_name>
        DAV svn
        SVNPath /absolute/path/to/repository
    </Location>
    其中 "/svn/repos_name" 就是客户端存取特定档案库的 URI(Uniform Resource Indentifier),SVNPath 后面指定的路径则是档案库的绝对路径,假设我们的档案库实际存放的路径是 d:/svn/MyProject,并且希望客户端使用 "http://myserver/svn/myprj" 的 URL 来存取档案库,那么要加入 httpd.conf 的内容就是:
    <Location /svn/myprj>
        DAV svn
        SVNPath d:/svn/MyProject
    </Location>
    注意 Location 标签后面的 /svn/myprj 的第一个斜线不可少!
    现在要设定 URL 路径与档案库实体路径的对应关系。对应的方式有两种,分别是与
     
    l         设置仓库物理路径 SVNParentPath。 
    如果你的档案库都集中放在某个目录之下,例如:d:/svn,那你就可以使用 SVNParentPath 的方式指定档案库的根路径,例如:
    <Location /svn>
        DAV svn
        SVNParentPath d:/svn
    </Location>
    这表示可以让任何人都可以透过 http://myserver/svn/<档案库名称> 的方式,存取位于 d:/svn 这个目录以下的所有档案库。也就是说,这个设定动作只需要一次,如果使用 SVNPath,你必须为各个档案库分别指定对应的路径。
    以上两种设定方式都可以,方便起见,这里我用 SVNParentPath 来统一指定所有档案库的父层 URL 路径。
    将 <Location> 的设定加到 Apache HTTP Server 的 httpd.conf 檔尾就行了。
    接着便可以开始建立档案库。
     
    三 建立档案库
    假设我们要把所有的档案库都放在 d:/svn 目录下,现在要建立一个测试用的档案库,名称叫做 在 repository,指令为:
    md d:/svn
    svnadmin create d:/svn/repository
    命令执行完后,检查看看 d:/svn/repository 目录底下产生了哪些目录和档案。
    一般有如下目录
    这时候你已经建立了一个档案库,你可以先在本机用浏览器测试一下,网址输入 http://localhost:8080/svn/repository/,看看能不能看到档案库的内容.
     
    四 存入仓库
    我们先测试一下这仓库是否成功,先建立以下目录结构
    c:
    cd temp
    md ProjectA
    md ProjectA/trunk
    md ProjectA/branches
    md ProjectA/tags
    svn import . http://localhost/svn/repository -m "Initial repository layout"
     

    提示
    本文在执行 svn 命令时,都是使用 http 协议的方式,这样我们可以确知 Subversion 与 Apache HTTP Server 的设定无误,其它人就可以透过 Internet 存取档案库。当然你也可以用其它的协议,例如:file:///,如果使用 file 协议,最后一行指令就变成:
    svn import . file:///d:/svn/repository -m "Initial repository layout"

    项目的目录结构
    这里补充说明一下 ProjectA 的目录结构。在 ProjectA 项目的根目录下建立的 trunk、branches、和 tags 这三个目录是有特别意义的,它们的作用分别是:
    trunk 目录用来存份目前项目正在进行开发的程序档案和文件(又称为主线,即 mainline);
    branches 用来存放主线的各个仍在发展中的分支;
    tags 则用来存放已经不再变动的分支,也就是其中的档案不会再修改了。
    这是 Subverion 官方手册建议的目录结构安排方式,你可以自己决定要不要用这种配置方式,详细说明请参考官方手册的第五章,子标题为 "Choosing a Repository Layout"。
    补充
    Subversion具有两种服务模式,一个是作为Apache的模块,另一个是自定义协议的Subserve服务。
    作为Apache的模块,客户端可以通过WebDAV/DeltaV协议访问Repository,而使用Subserve则使用
    Subversion的自定义协议。
    下表是两种服务模式的比较:
    功能
    Apache + mod_dav_sub
    Svnserve
    验证方式
    基于HTTPS的X.509、LDAP、NTLM或其他Apache支持的验证
    CRAM-MD5或者SSH
    用户帐户管理
    私有的用户文件
    私有的用户文件或已有的系统帐户
    授权管理
    blanket read/write access或单一目录的访问控制
    blanket read/write access
    加密
    可选的SSL
    可选的SSH隧道
    交互性
    可通过支持WebDAV的客户端访问
    无交互性
    Web访问
    有限的内置支持,或通过第三方的工具,例如ViewCVS
    通过第三方的支持,如ViewCVS
    速度
    稍慢
    稍快
    初始安装
    稍复杂
    相当简单
     
    使用 Windows 网域账户验证
    照着前面的步骤做,你会发现存取档案库时都不用输入账号密码,这是因为我们之前的设定没有启用身分验证的功能。但是我们通常不希望所有人都能任意存取你的档案库,免得重要资产外泄,或者数据被破坏,因此了解如何加入身分验证也是必要的。
    Serversion 提供了多种验证使用者身份的方式,这里只介绍 Windows 身分验证的方式,这种方式很适合用在开发团队成员都在局域网络内的情况。请依下列步骤进行:
    取得 SSPI 模块,下载网址为 http://tortoisesvn.tigris.org/mod_auth_sspi.zip
    把 zip 里面的 mod_auth_sspi.so 解压缩到 <Apache_root>\modules 目录下。
    把下面这行加入到 Apache 的 httpd.conf 里面:
    LoadModule sspi_auth_module modules/mod_auth_sspi.so
    注意上面加入的这行一定要放在下面这行的前面:
    LoadModule auth_module modules/mod_auth.so
    修改 httpd.conf 的 <Location> 设定如下:
    <Location /svn>
        DAV svn
        SVNParentPath d:/svn
        AuthType SSPI
        AuthName "Subversion 档案库"
        Require valid-user
        SSPIAuth On
        SSPIAuthoritative On
        SSPIDomain <domaincontroller>
        SSPIOfferBasic On
    </Location>
    其中 <domaincontroller> 就是你的 Windows 域控制器的计算机名称(例如:WIN2KDC),注意两边的括号 <> 不用保留。如果你的环境没有域控制器,就维持原来的 <domaincontroller> 就行了。在我的环境下,我发现即使有域控制器,但是这里不去设定它,还是能够正常的验证使用者身分。
     
    重新启动 Apache。
    七 采用文件方式进行身份验证
     
    此处也可以用mysql,passwd文件,LDAP等其他任何Apache支持的验证方式。
     
    此处我采用文件方式,首先建立一个保存密码的文件,如果不需要对密码加密,可增加-p参数生成plain text。
    %APACHE_HOME%\bin\htpasswd –c -p d:\passwd\passwords user1 12345执行后会提示您输入密码,这样就在文件passwords里生成一个用户名为user1的用户,
    生成的文件内容如下:
       #格式username:password
    user1:123456
     例子:
    Repository存放在D:\repository下,有两个repository: test and xtest
    每个repostory 的结构相同:
           根:01.txt
                  02.txt
            folder1-: 11.txt
           12.txt
    folder 2-: 21.txt
       22.txt
    对目录1和2作不同的读写权限控制
    Basic Authentication
    修改文件:
    Httpd.conf:
    #Basic authentication
    <Location /repository>
                  DAV svn
                  SVNParentPath d:/repository
                  AuthzSVNAccessFile d:/repository/accessfile                
               Require valid-user
                  AuthType Basic
                  AuthName "身份验证"
                  AuthUserFile d:/repository/passwd                  
    </Location>

    用Apache的htpasswd生成用户名和密码,
    Htpasswd –c passwd username
    第二次不用 –c。
    生成的用户名和密码在passwd中:
    0:$apr1$Vu5.....$XZ/csz/2YKoPNKpb88O5p0
    1:$apr1$vu5.....$I1VwMJ7JtRmpmJjVUlT4h1
    2:$apr1$Dv5.....$vf2MTg/p0mY.WcFhx7wET1
    3:$apr1$Tv5.....$gfk4AiP49h0JjKN8BuJdB.
     
    AuthzSVNAccessFile控制每个目录的读写权限
    [test:/]
    1 = r
    2 = r
    3 = r
    [test:/1]
    1 = rw
    [test:/2]
    2 = rw
     
    在客户端,用http://server/repository/test可以访问。也可以直接进入子目录访问:http://server/repository/test/1,http://server/repository/test/2。系统会要求进行认证。例如用户1对目录1有读写权限,可以commit修改,但对目录2所作的修改就不能commit。
    SSPI认证。
    按上一种方式,用户更换一次密码,就必须修改一次密码文件。用SSPI认证则可以没有这个问题。
    Httpd.conf文件:
    #SSPI authentication
    <Location /repository>
                  DAV svn
                  SVNParentPath d:/repository
                  AuthzSVNAccessFile d:/repository/accessfilesspi               
                  Require valid-user
                  AuthType SSPI
               AuthName "Subversion repositories"
                         # SSPI settings
                   SSPIAuth On
                   SSPIAuthoritative On
                   # point to domaincontroller
                   SSPIDomain domain.com.cn
                  SSPIOfferBasic On
    </Location>
    控制文件AuthzSVNAccessFile要作相应的修改:
    [test:/]
    domain\user1 = r
    domain\administrator = r
    [test:/1]
    domain\user1 = rw
    [test:/2]
    domain\user1 =
    domain\administrator = rw
    在tortoiseSVN使用时,会提示认证,填写用户名和密码即可。
     
    如果要按照Group的方式来控制权限,可同时建立一个groups文件,内容如下:
     
       #格式:GroupName: username1 username2
     
        svngroup: user1 user2  
    在httpd.conf中的/svn处增加权限控制部分: 
     
       <Location /svn>
     
        DAV svn
     
        # 指向SVN Repository的ROOT
     
        SVNPath d:/svnrepo
     
       
     
        AuthType Basic
     
        AuthName "Subversion Repository"
     
        AuthUserFile d:/passwd/passwords
     
        AuthGroupFile d:/passwd/groups
     
        Require group svngroup
     
        </Location>
     
     
    重起服务器,浏览http://localhost/svn,出现安全对话框,输入用户名密码即可成功。  
  • 相关阅读:
    C语言学习笔记之 程序流程结构
    C语言学习笔记之 类型转换
    C语言学习笔记之 标准输入输出函数
    C语言学习笔记之 运算符
    bzoj 4322 东西分配问题
    bzoj 3240 矩阵乘法+十进制快速幂
    bzoj 4017 子序列和的异或以及异或的和
    bzoj 1934 最小割
    bzoj 3275 最小割
    bzoj 3931 最短路+最大流
  • 原文地址:https://www.cnblogs.com/supercode/p/173516.html
Copyright © 2011-2022 走看看