版本控制最佳实践

用户经常为 Subversion 所困扰的问题,看看我们的最佳实践。

1. SVN最佳实践一:集中式用户管理

情景模拟

  • 情景一:用户抱怨,太多的密码要记,又多了SVN的用户名和密码!

  • 情景二:口令太多,干脆起个最简单的...

  • 情景三:我忘记口令了,如何找回?还是要麻烦管理员?

  • 情景四:管理员分配的口令太难记了,我要修改难道要告诉管理员我的新口令?

最佳实践 集中式的用户管理:

  • 管理员创建新用户

    • usermgmt.png

  • 为新用户授权

    • userauth.png

2. SVN最佳实践二:认证安全和单点登录

情景模拟

  • 安全法则一:80%的攻击来自于内部网络

  • 安全法则二:减少输入口令的机会,也减少了口令泄漏的机会

  • 示例:

    • 单点登录访问:websvn和邮件列表

最佳实践

  • 单点登录

    • sso.png

3. SVN最佳实践三:泛路径授权

问题提出

  • 事实一:SVN的分支和里程碑是以目录复制的方式实现的。

  • 事实二:SVN的目录授权设置在单独的配置文件中。

  • 事实三:对于主线(trunk)目录的授权,如果不一一的为每个分支、每个里程碑单独设置,实为安全漏洞!

    • /branches/1.x/

    • /branches/2.x/

    • /tags/1.0.1/

    • /tags/1.0.2/

    • ...

最佳实践 泛路径授权,可以在授权路径中加入通配符

  • /branches/*/src/敏感模块/

  • /tags/**/敏感模块/

{i} 仅限群英汇提供的 Subversion 软件包

4. SVN最佳实践四:授权管理的图形界面

问题提出

  • 事实:SVN对授权的语法要求非常严格。任何语法错误都导致SVN服务器不能工作!

  • 下面的配置文件有几处错误?

    • [groups]
      admin = &admin, admin1, admin2
      group1 = @group2, user1
      group2 = user2, @group1
      
      [aliases]
      admin = jiangxin
      
      [/]
      @admin = rw
      
      [/trunk]
      $authenticated = rw
      
      [repos1:/]
      * =
      user1 =
      @group1 = r
      @admin = rw
      
      [repos1:/trunk/src]
      * =
      @group1 = rw
      @visiters = r
      

最佳实践

  • 提供用户权限检查的页面

    • acl_check.png

  • 提供角色管理的界面

    • role_mgmt.png

  • 授权管理

    • acl_mgmt.png

5. SVN最佳实践五:提交事件邮件通知

情景模拟

  • 情景一:有的开发人员不喜欢写提交说明,且“屡教不改”,当配置了代码提交邮件通知后,大家都重视了。

  • 情景二:通过邮件列表对代码进行讨论,代码书写的规范性变强了。

最佳实践

  • mailinglist.png

    • 可存档;

    • 可订阅和退订;

    • 通过邮件推至桌面;

    • 可包含完成代码differ;

    • 也可仅仅包含代码修改统计;

6. SVN最佳实践六:SVN与缺陷跟踪整合

问题提出

  • 问题一:开发人员不善于写提交说明,如果能够从缺陷跟踪系统自动获取有多好?

  • 问题二:缺陷跟踪是开发过程的工作流管理软件,如果代码提交能够自动触发对应bug或需求的工作流状态变更,会大大提高工作效率。

最佳实践

  • 知道代码为何而更改

    • tracexplorer.png

  • 特殊格式化的提交说明,还有其它作用噢

    • console-commit.png

  • 包含特定格式提交说明,自动为 Bug或者需求 建立和代码的关联,并更改相应状态

    • ticket-update.png

  • 点击 Ticket 中的链接,查看代码变更

    • trac-changeset.png

7. SVN最佳实践七:用钩子实现更多扩展

  • CapCheckMergeInfo:禁止低版本SVN客户端提交

  • ReadonlySvnMirror:只读SVN镜像

  • CaseInsensitive:客户端文件名大小写不敏感

  • CommitLogCheck:检查提交说明

  • EolStyleCheck:换行符风格检查

  • EmailNotify:邮件通知配置

  • TracPostCommit:与Trac整合

  • AllowRevpropChange:允许版本属性修改

最佳实践

  • hooks-mgmt.png

8. SVN最佳实践八:Subversion统计

statistics.png


群英汇帮助类