在修改 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 代码评审设置
# 网络回调钩子
导航至 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 的历史记录,对于某一项历史记录可以选择”查看详情“与”重放“。
