ADMIN_00020_Setting_Repos_Hooks

1. 如何为版本库添加功能扩展?

Subversion 通过钩子脚本实现功能扩展。管理员可以通过图形界面为版本库设置功能扩展。

如何访问 Subversion 插件管理界面?

  • 在浏览器中输入 Subversion 后台管理 URL,如: http://dev.moon.ossxp.com/pysvnmanager/

  • 输入管理员的用户名和口令

  • 从功能菜单中选择 “版本库管理”

  • 选择相应的版本库

  • 如图所示:

    • svn_hooks_mgmt.png

如何添加功能扩展?

  • 在尚未安装的插件列表中,选择要安装的插件

  • 填写必要的参数后,点击按钮 “安装此插件”

如何删除功能扩展?

  • 选择功能扩展前的选择框

  • 点击页面下方的 “删除选择的插件” 按钮

如何修改/重新配置功能扩展?

  • 在当前插件配置列表中,每个差价的 ID 都可以点击,点击对应插件的英文 ID

  • 该插件的配置界面出现在页面的上方

  • 修改完成后,点击按钮 “安装此插件”

1.1. AllowRevpropChange: 允许修改版本属性

版本属性

版本属性是附着于版本提交的属性,即提交事件本身的属性,如:提交说明、提交者ID等等。和 Subversion 一般的属性概念不同,“版本属性”没有版本控制,一但修改不可恢复,不像 Subversion 的一般属性每次修改都要提交,因而一般属性被版本控制,修改不会破坏历史。

修改版本属性属于不可恢复动作,因此默认是禁用的。本插件可以开放对版本属性的修改。 如果通过本插件启用,最好启用 变更邮件通知 插件,使得版本属性的修改能够通过邮件发送出来,起到对原有版本属性存档以及通知的作用。

可选参数:

1.2. CapCheckMergeInfo: 禁止低版本的 SVN 客户端访问

Subversion 1.5 提供了合并追踪功能,如果用旧的 SVN 客户端( < 1.5.0 )访问,会造成对 Subversion 合并追踪的破坏。

启用此插件,会禁止低版本的 SVN 客户端提交。

可选参数:

1.3. CaseInsensitive: 检查大小写引起的文件名冲突

Subversion 本身对版本控制的文件、目录等是大小写区分的,这对于像 Windows 那样的对文件/目录名大小写不区分的文件系统来说,会出现混乱的情况。

  • 如果在同一个目录下提交了两个同名文件(仅仅大小写不同)

  • 在文件系统大小写不敏感的操作系统(如 Windows上),会造成文件的相互覆盖等各种古怪的现象

该插件通过在提交时,检查版本库中现有的文件,如果发现同名(仅大小写不同)文件,则终止提交,报错。

可选参数:

1.4. CommitLogCheck: 检查提交说明

缺省 Subversion 本身不进行提交说明检查,用户可以不写提交说明(commit log)提交。不写提交说明是非常不好的习惯。

怎样才是好的提交说明(Commit Log)?

  • 不要写冗余的信息。提交事件本身会包含:提交者ID,提交时间,提交的文件名称,代码的 differ 等。下列的提交说明包含冗余信息,不是合格的提交说明:

    • "本代码由 jiangxin 提交" (提交者ID是冗余信息)

    • "今天 2009-01-01 提交" (提交时间是冗余信息)

    • "添加文件 hello.cpp " (提交的文件名也是冗余信息)

  • 提交说明可以包含:为何做出更改 ── 实现了哪个功能需求,改正了哪个 Bug?

  • 提交说明可以包含:为何如此更改 ── 实现中用到的技巧

  • 提交说明有可能要比代码更改量还要多

可选参数:

  • 启用或关闭插件

    为了避免通过删除插件禁用而造成的配置信息丢失,该插件可以通过设置启用/停止按钮来启用和关闭插件。

    提交说明的最小长度

    输入大于 0 的整数。如果提交说明的字符数小于该值,则禁止提交。

    匹配的模板

    提交说明中必须包含的字符,如: (bug|issue)。缺省为空。

    不能出现的内容

    禁止在提交说明中出现的内容,缺省为空。

1.5. EmailNotify: 针对代码变更发出邮件通知

版本库中的数据变更(文件修改或者属性修改),发出通知邮件。缺省为空。

若要启用该插件,需要为邮件通知设置参数: 一个由多个命令行参数组成的一行文本作为该插件的参数。格式为

  • [options] email_addr [email_addr ...]

或者基于正则表达式,提供一个基于路径的代码变更的邮件通知。

  • [-m regex1] [options] [email_addr ...] [-m regex2] [options] [email_addr ...] ...

参数:

  • -m regex

    和提交路径相匹配的正则表达式。一个点 "." 匹配所有路径

    --from email_address

    发信人地址

    -r email_address

    回复邮件地址

    -s subject_prefix

    标题的前缀,如 [Prefix]

    --diff n

    不包含代码差异(缺省包含)

示例:

  • 所有代码变更发送一个只读的邮件列表: project1-commit@list.moon.ossxp.com, 回复地址设置为另外一个可写(允许讨论)的邮件列表: project1-discuss@list.moon.ossxp.com

    • --from noreply@moon.ossxp.com -r project1-discuss@list.moon.ossxp.com -s [DEV] project1-commit@list.moon.ossxp.com
  • 不包含代码差异的邮件发送到一个邮件列表,包含代码差异的邮件发送到另外的一个邮件列表

    • -m . --from noreply@moon.ossxp.com -r project1-discuss@list.moon.ossxp.com -s [DEV] --diff n project1-commit@list.moon.ossxp.com -m . --from noreply@moon.ossxp.com -r project1-discuss@list.moon.ossxp.com -s [DEV] --diff y project1-commit-with-diff@list.moon.ossxp.com

1.6. EolStyleCheck: 文件类型和换行符设置检查

如果启用该插件,则新增的文件,必须设置 svn:mime-type 和/或 svn:eol-style 属性。

当新增加的文件的 svn:mime-type 属性以 "text/" 开头,或者没有设置,则该文件必须设置 svn:eol-style 属性,以标识该文本文件的换行符属性。

为何要设置文本文件的换行符属性?

  • 为了更好的跨平台开发,需要设置文本文件的换行符属性。有以下几种情况:

    • 如果当前的项目正在跨平台开发(Windows 和 Linux),有的员工工作在一个平台上,有的工作在另外的操作系统上

    • 或者当前项目的开发语言支持跨平台开发(如: Java, Python, PHP, C, ...)

    • 或者当前项目是在 Linux 下开发而有的开发人员喜欢在 Windows下编辑(反之亦然)

  • 对提交文件进行换行符检查,避免出现混杂的换行符出现

可选参数:

1.7. ReadonlySvnMirror: SVN 工作在只读镜像模式,禁止用户写入

该扩展是为 Subversion 分布式部署而存在的。当 Subversion 主服务器位于远程网络,本地可以建立本地镜像而提供本地般的访问速度。 但要限制用户对该镜像服务器的访问,只有负责镜像的专用账号,才能够在镜像服务器中提交。

可选参数:

  • 启用或关闭插件。为了避免通过删除插件禁用而造成的配置信息丢失,该插件可以通过设置启用/停止按钮来启用和关闭插件。

  • Svnsync 管理员: 仅该账号可以提交到该只读 Subversion 镜像库。

1.8. TracPostCommit: Trac 与 SVN 整合

整合 SVN 与 trac(需求和缺陷跟踪系统)。如果 subversion 的提交说明包含 ticket id,则更新对应 trac 实例的 ticket 状态,将提交说明附加到 ticket 后。

可选参数:

  • 启用或关闭插件

    为了避免通过删除插件禁用而造成的配置信息丢失,该插件可以通过设置启用/停止按钮来启用和关闭插件。

    Trac 环境路径

    根据 trac 实例的部署,如实填写

    此版本库 trac 中的名称(缺省为空)

    如果对应的 Trac 实例配置了多个版本库,则需提供对应的版本库别名。缺省为空。

    标记为修复的ticket状态

    当提交代码标记为修复对应的 ticket(需求或者bug),Trac 中该 ticket 的状态设置为该值。缺省为为空(即 closed)