在修改 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 的历史记录,对于某一项历史记录可以选择”查看详情“与”重放“。
