从subversion开始(svn安装配置全过程(+全套安装文件与配置文件))

 

关键字: svn subversion svn安装配置 svn安装配置文件
花了一天时间,走了不少弯路,解决N多错误,终于全部完成了,记下安装过程中遇到的各种问题,希望对初步使用svn的TX们有所帮助。 
关于svn的介绍此处略过,直接进入正题。 
svn服务的开启有两种方式, 
  • 自带的svnserve服务(访问地址类似于svn://192.168.80.18/repos/)
  • 与Apache配合使用  (访问地址类似于http://192.168.80.18:8077/repos/)

下面先进入第一种的配置: 
1 安装,解压缩下载的svn压缩包到对应文件夹(建议路径不要有空格与中文) 
2 建立版本库,首先建立 f:/svn 空文件夹作为所有版本库的根目录。然后,进入命令行并切换到安装subversion的bin目录(建议将此目录设为path)。 
输入如下命令: 
svnadmin create f:/svn/repos 
3 运行服务进程 
在bin目录下输入: 
svnserve -d -r f:/svn 
注:-d参数效果同于--daemon 
    -r参数效果同于--root 
svnserve 将会在端口 3690 等待请求, 
    --daemon(两个短横线)选项告诉 svnserve 以守护进程方式运行,这样在手动终止之前不会退出。不要关闭命令行窗口,关闭窗口会把 svnserve 停止。 

    --root选项设置根位置来限制服务器的访问目录,从而增加安全性和节约输入svnserve URL的时间 
    如果不加root参数,服务url为:svn://localhost/svn/repos 
    而如果加上root参数,服务url为:svn://localhost/repos 

    此处的启动配置会影响服务url,如果输入url错误,会导致访问的时候出现异常 

4 为了验证svnserve正常工作,使用TortoiseSVN -> Repo-browser 来查看版本库。在弹出的 URL 对话框中输入: 
  svn://localhost/repos 
  点 OK 按钮后就可以看见 repo1 版本库的目录树结构了,只不过这时 repo1 是个空库。 
可能出现的问题: 
     Error: Can't connect to host '': 由于目标机器积极拒绝,无法连接。 
    解决:首先测试svn的3690端口是否打开:telnet localhost 3690 
    如果不成功说明服务没有被正常启动,请参考前面步骤 
    可以将svn服务添加到系统服务中去,步骤如下:这样可以避免每次重启后需要手动运行命令的烦恼 
    1 在subversion的安装路径下,找到bin文件夹 
    2 新建一个setupservice.bat文件,内容为: 

 

    这里有个需要注意的问题:“start= auto"等号后面要加上一空格 

    3 运行,这时在服务里可找到一个名为svnserve的服务。 
    在cmd命令行下查看打开的端口:netstat -ano就看到3690端口打开了 

     Error: No repository found in 'svn://localhost/svn/repos/jmxDemo'  
    解决: 
 

    解决如下: 
    svn://localhost/repos/jmxDemo 
    而不是 svn://localhost/svn/repos/jmxDemo 

5 配置权限 
  打开建立的版本库文件夹/conf 编辑server.conf 添加如下几行: 
 

      保证文件中只有这几行是不被注释的 
      在当前文件夹新建authz.conf 与passwd.conf文件 
      编辑passwd.conf文件,添加内容: 
     
      注意整个串前后都不要有空格 
      编辑authz.conf文件,添加内容: 
     
      
    6 导入文件夹 
      重启服务,在需要导入的文件夹上右键--TortoiseSVN -> Import 输入url:svn://localhost/repos/文件夹名 
      此处文件夹名需要被加上,不然会把文件夹下的所有文件弄到repos文件夹下,数据乱了 
      输入用户名密码:cjy 

      导入的时候可能出现的问题: 
        Error: Authorization failed 
        解决:权限问题 
    这个问题弄了蛮久,一直以为是拼写url的问题,找了半天没找到,然后确认问题是权限配置错误,查了半天也没看出来,后来弄清楚,是因为导入涉及到在根下写东西,所以必须要有根下的w权限,添加如下配置后问题解决: 
     

      注意: 
      版本库与导入项目最好不要重名,如果重名: 
      比如把arm下的东东导入到了这个版本库:svn://localhost/arm。 
      而配置权限的时候,[arm:/]这才代表工程的根目录,即:svn://localhost/arm 
      要想配到权限到目录下,就得这么写: [arm:/arm/],不然出错,且问题不容易排出 


      7 check out之,svn://localhost/repos/文件夹名 注意大小写区分,不然可能也会出现Error: Authorization failed错误 

      OK,至此svn自带服务配置完成,可以进行其他测试如update,commit等。都不会再出现问题。下面说明Apache配合svn提供http svn服务。 
      下面进入第二种配置:1、安装Apache,Apache的安装文件时一个msi文件可以直接双击运行(建议路径不要有空格与汉字) 
      2、从Subversion安装目录的 bin 子目录将 intl3_svn.dll、libdb44.dll 拷贝到Apache安装目录的bin 文件夹 
      3、从Subversion安装目录的 bin 子目录将 mod_authz_svn.so、mod_dav_svn.so 拷贝到Apache的模块目录(Apache 安装目录的    modules 文件夹)此步可省,配置的时候通过绝对路径的方式指定也可以 
      4、修改Apache的配置文件 httpd.conf ,使用LoadModule来加载mod_dav_svn模块。 
      1.  
      注:如果拷贝了so文件到模块目录了,可以将上面两个的路径改成modules/mod_dav_svn.so 的形式,否则请使用正确的绝对路径 
      请确认文件中未注释的数据只有以上四句 

         确定用来作为Subversion版本库的目录 
         在配置文件最后添加如下几行: 
       
         这个配置告诉Apache首先需要启用 dav_module,然后加载 dav_svn_module 。版本库对外的URL是: 
         http://localhost:8077/svn ,所有的Subversion版本库在物理上位于f:/svn/repos 。 
         配置完毕后重新启动 Apache,打开浏览器,输入 http://localhost:8077/svn 
          将会看到成功画面: 
         svn - Revision 10: /arm 
         .. 
         diary/ 
         ref/ 
         temp/ 

         -------------------------------------------------------------------------------- 
         Powered by Subversion version 1.6.0 (r36650). 

         这表示 Apache 的 dav_svn 模块已经可以正常工作了(现在已经可以通过http的方式获取svn中的内容了)。 
         
      5、测试通过之后,进行权限配置 

      5.1、基本 HTTP 认证 

      最简单的客户端认证方式是通过 HTTP 基本认证机制,简单的使用用户名和密码来验证一个用户的身份。Apache提供了一个 htpasswd 工具来管理一个用户文件,这个文件包含用户名和加密后的密码,这些就是你希望赋予 Subversion 特别权限的用户。htpasswd 可以在 Apache 的 bin 安装目录下找到。具体使用方法如下: 
      创建用户文件: 
      htpasswd -cm F:/svn/repos/conf/passwordfile cjy 
      添加新用户(-m 表示以 MD5 加密密码): 
      htpasswd [-m] F:/svn/repos/conf/passwordfile dmm 
      这个地方如果加上c,会把以前的覆盖掉 
      更改用户密码: 
      htpasswd [-m] F:/svn/repos/conf/passwordfile cjy 
      删除用户(要用大写的 D ): 
      htpasswd –D F:/svn/repos/conf/passwordfile cjy 
      接下来修改 httpd.conf,在 Location 标签中加入如下内容: 
       
        说明: 
        AuthType Basic:启用基本的验证,比如用户名/密码对。 
        AuthName "svn repos":当一个认证对话框弹出时,出现在认证对话框中的信息。(最好用英文,TortoiseSVN 不支持中文,安装语言包除外。) 
        AuthUserFile F:/svn/repos/conf/passwordfile:指定F:/svn/repos/conf/passwordfile为用户文件,用来验证用户的用户名及密码。 
        Require valid-user:限定用户只有输入正确的用户名及密码后才能访问这个路径 
        重新启动 Apache ,打开浏览器访问版本库。Apache 会提示你输入用户名和密码来认证登陆了,现在只有 passwd 文件中设定的用户才可以访问版本库。也可以配置只有特定用户可以访问,替换上述 "Require valid-user" 为 "Require user cjy dmm" 将只有用户文件中的 cjy 和 dmm 可以访问该版本库。 

        有的时候也许不需要这样严格的访问控制,例如大多数开源项目允许匿名的读取操作,而只有认证用户才允许写操作。为了实现更为细致的权限认证,可以使用 Limit 和 LimitExcept 标签。例如: 

        1.   
        以上配置将使匿名用户有读取权限,而限制只有 passwd 中配置的用户可以使用写操作。 
        如果这还不能满足你的要求,你希望精确的控制版本库目录访问,可以使用 Apache 的 mod_authz_svn 模块对每个目录进行认证操作。
        5.2、用 mod_authz_svn 进行目录访问控制 
        首先需要让 Apache 将 mod_authz_svn 模块加载进来。在 Subversion 的安装目录中找到 mod_auth_svn 模块,将其拷贝到 Apache 安装目录的 modules 子目录下。修改 httpd.conf 文件,添加: 
        LoadModule authz_svn_module modules/mod_authz_svn.so 
        现在可以在 Location 标签中使用 authz 的功能了。 
        注:在咱们的配置文件中已经进行了此步骤。此处可以略过 

        一个基本的 authz 配置如下: 

        AuthzSVNAccessFile 指向的是 authz 的策略文件,详细的权限控制可以在这个策略文件中指定。 
        AuthUserFile 指向加密用户文件的位置,只有在此文件中存在的用户才可以在authz策略文件中被正确配置 

        以(#)开头的行会被忽略;在它的简单形式里,每一小节命名一个版本库和一个里面的路径;认证用户名是在每个小节中的选项名;每个选项的值描述了用户访问版本库的级别:r(只读)或者rw(读写),如果用户没有提到或者值留空,访问是不允许的; * 表示所有用户,用它控制匿名用户的访问权限;@符号区分组和用户。如: 
         


          使用 SVNParentPath 代替 SVNPath 来指定多个版本库的父目录时,其中所有的版本库都将按照这个策略文件配置。例如上例中  cjy将对所有版本库里的 /tags 目录具有读写权限。如果要对具体每个版本库配置,用如下的语法: 
           
            这样 repos1的 project1_vip 组只能对 repos1 版本库下的文件具有写权限而不能修改版本库 repos2 ,同样 repos2 的 project2_vip 组也不能修改 repos1 版本库的文件。 


            可能出现的错误: 
            1、路径或权限不足时将出现错误信息提示: 
            http://localhost (路径不对) 
            Error * PROPFIND request failed on '/' PROPFIND of '/': 200 OK (http://localhost) 
            http://localhost/svn (权限不足) 
            Error * PROPFIND request failed on '/svn' PROPFIND of '/svn': 403 Forbidden (http://localhost) 
            http://localhost/svn/repos (正常显示) 
            http://localhost/repos (权限不允许) 
            Error * PROPFIND request failed on '/repos' PROPFIND of '/repos': 405 Method Not Allowed (http://localhost) 

            2、不启动E:/subversion/bin/svnserve.exe ,但启动了ApacheSVN ,访问(tortoiseSVN –> Repo – browser)或提交(SVN Commit)情形如下: 
            现象:svn://localhost/svn/repos 不能访问或提交,提示:Error * Can't connect to host 'localhost': 由于目标机器积极拒绝,无法连接。 但 file:///e:/svn/repos 和 http://localhost/svn/repos 可以访问或提交。 
            原因:svn:// 是独立服务器 svnserver 自己的协议。file:/// 是本地访问,即服务器端和客户端在一个机器上 
            3、  具体到使用so的时候报错  Cannot load mod_dav_svn.so into server: /xd5/xd2/xb2/xbb/xb5/xbd/xd6/ 
               解决:可能是版本的冲突,请使用2.2.9配1.6 
               解压缩下载的svn,里面会有一个readme文件,打开后会列出其支持的相关应用列表,请下载相对应的apache版本 
               推荐2.2.9+1.6.0,版本较新,且已经测试通过(附件中有安装文件) 

                httpd.exe: Syntax error on line 87 of D:/Java/apache/conf/httpd.conf: Invalid LoadModule path modules/mod_dav_svn.so" 
               解决:几个DLL冲突, apache/bin/*.DLL 最终列表: 
             


                 Installing the Apache2.2 service 
              The Apache2.2 service is successfully installed. 
              Testing httpd.conf.... 
              Errors reported here must be corrected before the service can be started. 
              httpd.exe: Could not reliably determine the server's fully qualified domain name 
              , using 192.168.80.18 for ServerName 
              (OS 10048) 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : make_sock: c 

                 解决:修改端口(在Apache配置文件中查询Listen,改成其他端口,因为此端口已经被占用) 

              Could not open the requested SVN filesystem  [500, #720123] 
              解决:路径没配正确 

              是路径的问题 
              在httpd.conf里设的SVNParentPath 是f:/svn 
              实际的repository的路径是f:/svn/repos/Project1 
              SVNParentPath 应该设为f:/svn/repos 
              问题解决 

              Error * PROPFIND request failed on '/svn' PROPFIND of '/svn': could not connect to server (http://localhost:8077)解决:服务未正常启动 

              注:附件内容: 
              分别为Apache2.2.9与svn1.6.0的安装文件(此配合不会出现版本冲突) 
              svnserver下权限配置(复制文件到svn版本库的config文件夹下,重启svnserver即可) 
              Apache下全线配置(复制文件到Apache安装文件夹的config文件夹下,重启Apache即可)

               

              • 0
                点赞
              • 1
                收藏
                觉得还不错? 一键收藏
              • 0
                评论
              目录 译者序 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书组织结构 Subversion 1.1的新特性 这本书是免费的 致谢 来自Ben Collins-Sussman 来自Brian W. Fitzpatrick 来自C. Michael Pilato 1. 介绍 Subversion是什么? Subversion的历史 Subversion的特性 Subversion的架构 安装Subversion Subversion的组件 快速入门 2. 基本概念 版本库 版本模型 文件共享的问题 锁定-修改-解锁 方案 拷贝-修改-合并 方案 Subversion实战 工作拷贝 修订版本 工作拷贝怎样追踪版本库 修订版本混合的限制 摘要 3. 指导教程 帮助! 导入 修订版本: 号码、关键字和日期,噢,我的! 修订版本号 修订版本关键字 修订版本日期 初始化的Checkout 基本的工作周期 更新你的工作拷贝 修改你的工作拷贝 检查你的修改 svn status svn diff svn revert 解决冲突(合并别人的修改) 手工合并冲突 拷贝覆盖你的工作文件 下注:使用svn revert 提交你得修改 检验历史 svn log svn diff 比较本地修改 比较工作拷贝和版本库 比较版本库与版本库 svn cat svn list 关于历史的最后一个词 其他有用的命令 svn cleanup svn import 摘要 4. 分支与合并 什么是分支? 使用分支 创建分支 在分支上工作 分支背后的关键概念 在分支间拷贝修改 拷贝特定的修改 合并背后的关键概念 合并的最佳实践 手工追踪合并 预览合并 合并冲突 关注还是忽视祖先 常见用例 合并一条分支到另一支 取消修改 找回删除的项目 常用分支模式 发布分支 特性分支 转换工作拷贝 标签 建立最简单的标签 建立复杂的标签 分支维护 版本库布局 数据的生命周期 摘要 5. 版本库管理 版本库基本知识 理解事务和修订版本 未受版本控制的属性 版本库数据存储 Berkeley DB FSFS 版本库的创建和配置 钩子脚本 Berkeley DB配置 版本库维护 管理员的工具箱 svnlook svnadmin svndumpfilter svnshell.py Berkeley DB工具 版本库清理 管理磁盘空间 版本库的恢复 版本库的移植 版本库备份 添加项目 选择一种版本库布局 创建布局,导入初始数据 摘要 6. 配置服务器 概述 网络模型 请求和响应 客户端凭证缓存 svnserve,一个自定义的服务器 调用服务器 内置的认证和授权 创建一个用户文件和域 设置访问控制 SSH认证和授权 SSH配置技巧 初始设置 控制调用的命令 httpd,Apache的HTTP服务器 必备条件 基本的Apache配置 认证选项 基本HTTP认证 SSL证书管理 授权选项 整体访问控制 每目录访问控制 关闭路径为基础的检查 额外的糖果 版本库浏览 其它特性 支持多种版本库访问方法 7. 高级主题 运行配置配置区布局 配置和Windows注册表 配置选项 服务器 config 属性 为什么需要属性? 处理属性 特别属性 svn:executable svn:mime-type svn:ignore svn:keywords svn:eol-style svn:externals svn:special 自动属性设置 Peg和实施修订版本 外部定义 卖主分支 常规的卖主分支管理过程 svn_load_dirs.pl 本地化 理解地区 Subversion对地区的支持 Subversion版本库URL 8. 开发者信息 分层的库设计 版本库层 版本库访问层 RA-DAV(使用HTTP/DAV版本库访问) RA-SVN(自定义协议版本库访问) RA-Local(直接版本库访问) 你的RA库在这里 客户端层 使用API Apache可移植运行库 URL和路径需求 使用C和C++以外的语言 进入工作拷贝的管理区 条目文件 原始拷贝和属性文件 WebDAV 使用内存池编程 为Subversion做贡献 加入社区 取得源代码 开始熟悉社区政策 作出修改并测试 贡献你的修改 9. Subversion完全参考 Subversion命令行客户端:svn svn选项 svn子命令 svn add svn blame svn cat svn checkout svn cleanup svn commit svn copy svn delete svn diff svn export svn help svn import svn info svn list svn log svn merge svn mkdir svn move svn propdel svn propedit svn propget svn proplist svn propset svn resolved svn revert svn status svn switch svn update svnadmin svnadmin Switches svnadmin Subcommands svnadmin create svnadmin deltify svnadmin dump svnadmin help svnadmin hotcopy svnadmin list-dblogs svnadmin list-unused-dblogs svnadmin load svnadmin lstxns svnadmin recover svnadmin rmtxns svnadmin setlog svnadmin verify svnlook svnlook选项 svnlook svnlook author svnlook cat svnlook changed svnlook date svnlook diff svnlook dirs-changed svnlook help svnlook history svnlook info svnlook log svnlook propget svnlook proplist svnlook tree svnlook uuid svnlook youngest svnserve svnserve选项 svnversion svnversion mod_dav_svn mod_dav_svn Configuration Directives A. Subversion对于CVS用户 修订版本号现在不同了 目录的版本 更多离线操作 区分状态和更新 分支和标签 元数据属性 冲突解决 二进制文件和转化 版本化的模块 认证 转化CVS版本库到Subversion B. 故障解决 共同问题 使用Subversion的问题 每当我尝试访问版本库,我的Subversion客户端挂起。 每当我尝试运行svn,它告诉我工作拷贝已经锁定。 我在查找和打开版本库时得到错误,而我知道我的版本库URL是正确的。 我怎样在file://的URL中指定一个Windows驱动器盘符? 通过网络对Subversion版本库进行写操作发生问题。 在Windows XP下,Subversion服务器有时候看起来发送损坏的数据。 跟踪Subversion客户端和Apache服务器通话最好的方法是什么? 我刚刚编译了二进制分发版本,当我尝试检出Subversion,我得到一个“Unrecognized URL scheme”错误。 为什么svn revert命令要有一个明确的目标?为什么缺省不是递归的?它的行为方式与大多数其它子命令不同。 当我启动Apache,mod_dav_svn抱怨说发现一个“bad database version”,它发现了db-3.X而不是db-4.X。 我在RedHat 9得到“Function not implemented”错误,无法工作,我如何修正这个问题? 为什么日志说通过Apache(ra_dav)提交或导入的文件“(no author)”? 我偶然在Windows得到“Access Denied”错误,它们看起来随即出现。 在FreeBSD,某些操作(特别是svnadmin create)有时会挂起。 我可以在web浏览器看到我的版本库,但是svn checkout给我一个301 Moved Permanently错误。 我尝试察看我的文件的一个老版本,但是svn告诉我“path not found”。 C. WebDAV和自动版本化 WebDAV基本概念 仅是平常的WebDAV DeltaV扩展 Subversion和DeltaV 影射Subversion到DeltaV 自动版本化支持 选择mod_dav_lock 自动版本化交互性 Win32网络文件夹 Mac OS X Unix: Nautilus 2 Linux davfs2 D. 第三方工具 客户端和插件 语言绑定 版本库转化 高级工具 版本库浏览工具 E. 版权 术语表 插图清单 1.1. Subversion的架构 2.1. 一个典型的客户/服务器系统 2.2. 需要避免的问题 2.3. 锁定-修改-解锁 方案 2.4. 拷贝-修改-合并 方案 2.5. 拷贝-修改-合并 方案(续) 2.6. 版本库的文件系统 2.7. 版本库 4.1. 分支开发 4.2. 开始规划版本库 4.3. 拷贝后的版本库 4.4. 一个文件的分支历史 8.1. 二维的文件目录 8.2. 版本时间—第三维! 表格清单 2.1. 版本库访问URL 5.1. 版本库数据存储对照表 6.1. 网络服务器比较 8.1. Subversion库的摘要目录 范例清单 5.1. 使用svnshell浏览版本库 5.2. txn-info.sh(异常事务报告) 6.1. 匿名访问的配置实例。 6.2. 一个认证访问的配置实例。 6.3. 一个混合认证/匿名访问的配置实例。 6.4. 关闭所有的路经检查 7.1. 注册表条目(.reg)样本文件。 8.1. 使用版本库层 8.2. 使用Python处理版本库层 8.3. 一段检出工作拷贝的简单脚本 8.4. 典型的.svn/entries文件内容 8.5. 有效地池使用
              评论
              添加红包

              请填写红包祝福语或标题

              红包个数最小为10个

              红包金额最低5元

              当前余额3.43前往充值 >
              需支付:10.00
              成就一亿技术人!
              领取后你会自动成为博主和红包主的粉丝 规则
              hope_wisdom
              发出的红包
              实付
              使用余额支付
              点击重新获取
              扫码支付
              钱包余额 0

              抵扣说明:

              1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
              2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

              余额充值