美文网首页
版本控制工具入门——SVN

版本控制工具入门——SVN

作者: Ridiculous_one | 来源:发表于2019-07-19 16:44 被阅读0次

    本文首发于 LOGI'S BLOG,由作者转载。

    SVN 全称 Subversion,是 CVS 的替代品,在当前时间节点,与 Git 共同为软件公司采用,进行项目管理。

    软件安装

    主流的 SVN 服务端为 VisualSVN Server,客户端为 TortoiseSVN,以下操作都以上述软件为例。

    工作流程

    项目经理首先将项目初始化到 SVN 服务器 上,开发人员首次获取远程仓库使用 Checkout 命令,之后如服务器发生变更,使用 Update 命令更新代码,本地开发完成后,使用 Commit 命令提交。

                    —————Commit—————>| SVN Server
    Project Manager <————Checkout————| svn://192.168.1.1
                    <————Update——————| Project Shop
                                     |      |--core.php
                    <————Checkout————|      |--common.php
       Developer    <————Update——————|
                    —————Commit—————>|
    

    服务端配置

    初始化版本仓库

    • 安装好 SVN 服务端 后,创建 D://SVN/WebApp 文件夹存放所有项目
    • 进入 WebApp 目录,新建 Shop 目录作为当前项目仓库
    • CMD 窗口 切换到 WebApp,通过 svnadmin create Shop 命令初始化版本仓库

    监管仓库目录

    启动监管服务后,客户端才能通过 svn://ip 访问到项目仓库。

    REM 启动后台监管
    REM -d(daemon) -r(repository)
    svnserve -d -r D://SVN/WebApp/Shop
    

    如有多个仓库,可监管所有项目的上级目录,此时客户端可通过 svn://ip/repo/name 访问某个仓库。

    REM 启动监管
    REM -d(daemon) -r(repository)
    svnserve -d -r D://SVN/WebApp
    

    使用命令监管需要保持窗口状态,不能关闭,也无法开机自启,为解决以上问题,可将其添加到 Windows Services。具体操作为,在 CMD 中以管理员身份执行以下命令。

    REM 创建服务
    sc create SVNService binpath="C:\Program Files\Subvision\bin\svnserve.exe --service -r D:\SVN" start=auto
    
    REM 开启服务
    net start SVNService
    
    REM 停止服务
    net stop SVNService
    
    REM 删除服务
    sc delete SVNService
    

    权限控制

    默认情况下,SVN 服务端不允许匿名用户上传文件,为了方便调试,可对项目目录下的 conf/svnserve.conf 文件进行更改。

    REM 所有用户均可读可写
    anon-access = write
    

    但在实际开发中,处于安全考虑,应该建立多个 SVN 账号,并对它们分配不同权限。具体操作为,更改项目目录下的 conf/svnserve.conf 文件,打开认证选项。

    REM 禁用匿名用户访问
    # anon-access = write
    
    REM 打开认证功能
    password-db = passwd
    authz-db = authz
    

    随后,更改项目目录下的 conf/passwd 文件,配置用户名和密码。

    [users]
        admin = admin
        logi1 = 123456
        logi2 = 123456
        logi3 = 123456
        logi4 = 123456
    

    最后,更改项目目录下的 conf/authz 文件,配置用户分组,和各组权限。

    [groups]
        admin = admin
        developer = logi1,logi2,logi3,logi4
    
    # 对每个仓库单独配置
    [Shop:/]
        @admin = rw
        @developer = r
        # * 代表剩下的组,或匿名组
        * = r
    

    同步 SVN 和 WEB 服务器

    为了实时预览 SVN 服务器上的文件,可将其同步到 WEB 服务器中,方便浏览器访问查看。该需求可通过 SVN 服务器提供的 钩子程序 实现。此处,我们利用项目目录下的 hooks/post-commit.tmpl 钩子,它在 commit 完成后被触发,钩子一般使用 batshell 开发。

    新建 hooks/post-commit.cmd 文件,并编写以下内容。

    REM Apache HTML 文件目录
    SET WEB_SERVER_DIR="D:\server\apache\htdocs\shop"
    
    REM SVN 可执行程序
    SET SVN="D:\svn\bin\svn.exe"
    
    REM 更新数据到 Apache 目录
    %SVN% update %WEB_SERVER_DIR%
    

    切换到 Apache HTML 目录,进行一次 Checkout 操作,此后,服务端一旦收到 commit,便会触发批处理,随后便可通过浏览器预览提交。

    客户端使用

    客户端安装完毕后需要重启电脑加载注册表,否则 SVN 状态图标 不会显示。如需汉化,先安装汉化包,随后右键桌面空白处,依次点击 TortoiseSVN -> Settings -> General,选择 Language 下拉框中的 中文(简体) 确定即可。

    拉取服务端代码

    新建项目目录并进入,空白处右键鼠标,依次进入 TortoiseSVN -> 版本库浏览器,输入 SVN 服务器 svn://192.168.1.1 后点击确定。右键版本库中列出的仓库,选择 检出,点击 确定。此时,打开文件管理器的 显示隐藏文件选项,便可看到初始化的 .svn 文件夹。

    Checkout 做了两件事,首先与服务端建立连接,其次拉取最新代码。以后如需更新代码,要使用 Update 指令。

    更新服务端代码和本地代码提交

    更新代码使用 Update。提交代码用 Commit,需要说明的是 message 要根据公司规定填写,例如 模块——功能——作者

    图标含义和忽略文件列表

    右键项目目录空白处,依次进入 TortoiseSVN -> 设置 -> 图标覆盖 -> 图标集 可查看所有图标含义。

    对于无需上传服务器的文件,可将其添加到忽略列表。具体操作为右键项目需要忽略的文件,依次点击 TortoiseSVN -> 增加到忽略列表,可选择通配符形式,如 *.ppt,如果是目录,选择 以递归方式忽略

    版本回退

    一般误删文件或新版本有重大问题时,要进行版本回退。右键项目目录空白处,依次进入 TortoiseSVN -> 更新至版本。在 回退对话框 中点击 显示日志,在弹出的 日志对话框 中,选择 对应提交 后确定,之后点击 回退对话框 的确定即可。

    解决版本冲突

    假设开发人员 A 和 B 同时拉取服务器上的同一文件进行开发,A 先于 B 提交,B 在提交时就会发送版本冲突。

    此时,B 应该先 Update,随后手动编辑文件解决冲突,可与 A 商量如何解决,最后 Commit

    假设 index.php 发生冲突,在 Update 后会生成 4 个相关文件,分别是:

    • 整合后的文件,index.php
    • B 自己开发的文件,index.php.mine
    • 两人都未开发前的文件:index.php.r6
    • A 先开发完毕提交的文件,index.php.r7

    B 只需将 index.php 中的冲突解决,随后删除其他三个文件,提交即可。冲突区域如下所示:

    <<<<<<< .mine
        echo 'by B'
    =======
        echo 'by A'
    >>>>>>> .r7
    

    相关文章

      网友评论

          本文标题:版本控制工具入门——SVN

          本文链接:https://www.haomeiwen.com/subject/tzyslctx.html