在修改 SVN 项目设置的过程中,需要输入 SVN 路径的地方推荐使用相对于 SVN 项目根目录的相对路径格式,例如/trunk,/branches/feature

# 基础设置

导航至 SVN 项目 - 设置 - 基础设置,有项目组 master 及以上权限的用户或项目根路径审批人可以对项目名称、项目描述和项目详细进行修改。

# 目录规则

导航至 SVN 项目 - 设置 - 目录规则,可以按目录为维度配置提交设置与代码评审设置。

# 提交设置

在代码提交到 SVN 仓库之前,可以按 SVN 路径设置一些检查项目,对不符合规则的提交加以限制,促进代码质量的提升。

在目录规则列表页可以看到当前项目下所有的目录规则,每个路径下方的标签表示当前路径已配置的提交设置检查项,父目录的提交设置会继承至子目录且子目录不能更改。

在目录规则列表页点击“新增目录规则”,即可为一个新路径配置目录规则,首先需要配置的就是提交设置。

目录路径: 可填写自己有审批人或者写权限的路径,也可以点击输入框旁的“浏览...”打开 SVN 浏览器更加方便地选择路径。

提交设置目前可配置 3 类检查项:

  • 禁止提交代码: 禁止相应路径的代码提交,主要用于产品版本发布时,限制经过测试的分支不能再被修改,提高产品的可靠性。
  • 提交信息中应包含 TAPD 工单: 如果提交信息中不包含--story=xxx,--bug=xxx 或者--task=xxx 格式的 TAPD 工单信息,提交会被拒绝。限制用户要提交的代码必须与某个人 TAPD 需求或者 BUG 相关联,让 SVN 代码提交有的放矢,也可以在 TAPD 需求里直接查看 SVN 关联代码。
  • 必须通过代码评审: 提交信息中应包含--crid=xxx 格式的代码评审单,且代码评审状态应处于通过状态。限制用户要提交代码必须经过代码评审才能提交,同时还可以限制本次提交的所有文件必须包含在 CR 单的变更文件中(可选),经过多人把关的代码会更安全。

# 代码评审设置

SVN 的代码评审设置与 Git 类似,可以参考 Git 代码评审设置

# 排队锁设置

注意:项目组 master 及以上权限的用户或项目根路径审批人才会显示此选项

导航至 SVN 项目 - 设置 - 高级设置 - TSVN 配置,可设置排队锁的等待超时和通知规则,详细使用方式请查阅工蜂客户端排队锁使用指南

# 检出锁设置

注意:项目组 master 及以上权限的用户或项目根路径审批人才会显示此选项

导航至 SVN 项目 - 设置 - 高级设置 - TSVN 配置,可通过配置检出锁规则实现文件级独占编辑,并对符合规则的文件进行只读控制。

# 添加检出锁

# 本地钩子配置

导航至 SVN 项目 - 设置 - 高级设置 - TSVN 配置,可以按仓库路径统一配置 Hook。配置后,客户端在提交、更新或锁定时会自动获取并执行对应的 Hook,无需在本地手动配置。

# 钩子配置列表

在已配置钩子列表页,可以查看当前项目下不同仓库路径的钩子脚本配置,钩子配置下方显示的是钩子类型,具有路径审批人或写权限的用户可以复制,编辑以及删除钩子,点击页面右上角“新增钩子脚本”可以新增钩子脚本。

复制: 以当前钩子配置为模板,为其他 SVN 路径创建钩子配置。复制后,可根据目标 SVN 路径的实际需求进一步修改相关配置。

编辑: 修改已有的钩子配置,可调整钩子类型、SVN 路径、脚本文件等配置项。

删除: 删除已有的钩子配置。删除后,该配置将不再应用于对应的 SVN 路径,钩子脚本文件本身不会被删除。

# 新增钩子脚本

钩子类型: 选择需要配置的 SVN 钩子类型。可根据实际业务需求选择,为对应的 SVN 操作配置相应的钩子脚本。

SVN 路径: 可填写具有审批权限或写权限的 SVN 路径,也可以点击输入框旁的“浏览…”打开 SVN 浏览器,选择所需路径。

执行脚本: 可填写钩子脚本文件路径,也可以点击输入框旁的“浏览…”打开 SVN 浏览器,在对应 SVN 项目的脚本存放目录中选择钩子脚本文件。

注意:执行脚本填写或选择的路径必须存在对应的钩子脚本文件

执行选项:

  • 等待脚本运行结束: 等待钩子脚本执行完成后,再继续当前 SVN 操作。

  • 运行时隐藏脚本: 执行钩子脚本时隐藏脚本运行窗口,在后台执行。

  • 总是执行这些脚本: 不受常规执行条件限制,始终执行配置的钩子脚本。

注意: 钩子配置按 SVN 仓库内路径匹配工作副本。由于用户可能只 checkout 仓库中的部分路径,系统按以下规则判断配置是否生效:

  • 配置路径为 * 或 /:对所有工作副本生效。

  • 配置路径与工作副本路径相同,或两者存在上下级关系:配置生效。

  • 配置路径与工作副本路径完全无关:配置不生效,客户端会自动跳过该配置。

# 常见问题

1、为什么我没配 hook,操作却触发了脚本?

答:项目管理员在「项目 - 高级设置 - 本地钩子配置」中统一配置了 Hook,客户端会自动获取并执行。因此,即使你未手动配置 Hook,也可能触发脚本,属于正常情况。

2、为什么找不到 "Retry without hooks" 按钮?

答:当前 Hook 为强制执行,不允许跳过。为避免被绕过,客户端不会显示「Retry without hooks」按钮。

3、为什么改了项目的钩子脚本配置,客户端没立即生效?

答:客户端默认会缓存钩子脚本配置,修改后可能不会立即生效,一般等待 5~8 分钟左右,系统会自动刷新并应用最新配置。

4、要是断网了还能提交吗?

答:能的。断网时,系统会继续使用本地缓存的配置,不影响当前提交。如果之前从未成功获取过配置,则本次不会执行下发的 Hook,只执行本地 Hook。

5、如果钩子脚本没有下载到本地,会怎么样?

答:不用担心,客户端会自动从仓库获取脚本,缓存到工作副本的 .svn\hooks\scripts\ 目录后执行,无需手动执行 update 。

6、下发的 Hook 会影响外链目录(svn:externals)吗?

答:不会。外链目录属于独立项目,会使用其自身项目配置的 Hook,不会使用主工作区的 Hook,两者互不影响。

# 版本管理

注意:项目组 master 及以上权限的用户或项目根路径审批人才会显示此选项

首先,项目管理员可进入项目设置 - 高级设置 - 版本管理,开启“最低版本校验”。

如图,开启后,可设置项目要求的最低客户端版本,并根据版本校验策略选择对低于最低版本的客户端执行提醒或拦截,确保团队成员使用符合要求的客户端版本。

# 网络回调钩子

导航至 SVN 项目 - 设置 - 高级设置 - 网络回调钩子,网络回调钩子(Webhook)就是用户通过自定义回调函数的方式来改变 Web 应用的一种行为,这些回调函数可以由不是该 Web 应用官方的第三方用户或者开发人员来维护,修改。通过网络回调钩子,你可以自定义一些行为通知到指定的 URL 去。比如用户可以通过自己编写一个接口,在 svn 提交前做一些检查等等。

# 网络回调钩子列表

在网络回调钩子列表页可以看到当前项目下所有的网络回调钩子,Webhook Url 下方显示的是触发事件类型,具有路径审批人或者写权限的用户可以测试钩子、查看钩子的发送历史以及删除钩子,点击页面右上角“新增网络回调钩子”可以新增网络回调钩子。

# 新增网络回调钩子

SVN 路径: 可填写自己有审批人或者写权限的路径,也可以点击输入框旁的“浏览...”打开 SVN 浏览器更加方便地选择路径。

Url: 填写自定义的接口地址,相关接口可以通过任何语言进行撰写,只要是相关的 http 接口即可。

秘密令牌: 非必填,如果有指定,触发时发送参数中会带上这个令牌。

触发器: 目前支持两种,提交前(pre-commit)和提交后(post-commit),点击相应触发器旁的“参数描述”可以查看发送的具体参数。

  • 提交前(pre-commit): 如果配置了这个钩子,svn 提交前会调用用户的接口,给用户传入相关输入参数,包括用户名,log,rep_name 等。用户通过判断这些参数的有效性,决定是否可以进行提交,并可以自定义错误信息。钩子参数如下:
输入:
{
  "object_kind": "pre_commit",
  "operation_kind": "update",
  "action_kind": "svn client commit",
  "revision": "19-v1",
  "user_name": "svn_user",
  "user_id": 10000,
  "user_email": "svn_user@example.com",
  "project_id": 10000,
  "repository": {
    "name": "example",
    "description": "",
    "homepage": "https://example.com/example_project",
    "svn_http_url": "https://example.com/example_project",
    "svn_ssh_url": "svn+ssh://example.com/example_project",
    "url": "svn+ssh://example.com/example_project ",
    "visibility_level": 0
  },
  "timestamp": "2023-04-12T19:04:21+0000",
  "message": "update readme",
  "files": [
    "trunk/example.txt"
  ],
  "paths": [
    "trunk/"
  ],
  "push_options": {},
  "push_timestamp": "2023-04-12T11:04:22+0000",
  "total_files_count": 1,
  "create_and_update": null
}

输出:
{
  "status": 200 | 500,
  "message": "ok" | "error",
}
  • 提交后(post-commit): 相关 svn 路径下的代码在提交后会调用相关 post-commit 的接口,可以完成一些通知或者检查功能等。钩子参数如下:
输入:
{
  "object_kind": "post_commit",
  "operation_kind": "update",
  "action_kind": "svn client commit",
  "revision": 20,
  "user_name": "svn_user",
  "user_id": 10000,
  "user_email": "svn_user@example.com",
  "project_id": 10000,
  "repository": {
    "name": "example",
    "description": "",
    "homepage": "https://example.com/example_project",
    "svn_http_url": "https://example.com/example_project",
    "svn_ssh_url": "svn+ssh://example.com/example_project",
    "url": "svn+ssh://example.com/example_project",
    "visibility_level": 0
  },
  "timestamp": "2023-04-12T19:04:23+0000",
  "message": "update readme",
  "files": [
    {
      "type": "U",
      "file": "trunk/example.txt",
      "directory": false,
      "size": -1,
      "insertions": 0,
      "deletions": 0
  }
  ],
  "paths": [
    "trunk/"
  ],
  "push_options": {},
  "push_timestamp": "2023-04-12T11:04:23+0000",
  "total_files_count": 1,
  "create_and_update": null
}

输出:
{
  "status": 200 | 500,
  "message": "ok" | "error"
}

# 网络回调钩子发送历史

点击已创建的 hook 的”发送历史“按钮即可进入到发送历史页面。

可以通过搜索和状态筛选来查找 hook 的历史记录,对于某一项历史记录可以选择”查看详情“与”重放“。

lastUpdate: 10/27/2026, 4:46:30 PM