# SVN

URL: https://docs.ones.cn/on-premises/7.33/product-manual/ones-project/ones-devops/code-integration/svn

通过代码关联集成 SVN（包括 Windows/Linux/Mac 系统的 SVN ） ，将代码提交和 Project 模块结合使用。

## 1.仓库集成配置

### 1.1 新建关联代码仓

SVN 服务端版本最低支持 Subversion 1.7.x，推荐使用 Subversion 1.10.x。请对应选择客户端版本，客户端推荐使用 TortoiesSVN 1.13.x。

启用「代码集成」应用后，前往配置中心-代码集成配置进行代码仓库的关联，点击「新建关联代码仓」以关联当前团队所需 SVN 代码仓。

![SVN](https://docs.ones.cn/assets/images/e0a402422d4814bf-1c09181cff320da15fea817a23ceb210.png)

填写仓库名称，关联仓库。

SVN 仓库不支持自动配置Webhook,需要手动配置。打开详情页，按照配置指引完成仓库地址、Webhook的配置。

![SVN](https://docs.ones.cn/assets/images/65511219dc22de13-1730aac27929ad49f46dc83c33e72361.png)

### 1.2 配置 Webhook

你需要先在 SVN 服务器上下载 Webhook 工具，然后选择执行命令的参数。注意：执行命令前，Windows 用户需提前准备 Python 2.7 环境。

SVN 仓库的Webhook 不同于Git类型仓库，需要通过配置工具完成仓库的连接，Webhook的配置。

按配置指引执行命令，用于配置 Webhook 的必须参数：repo_dir、webhook_url、secret_key。

![SVN](https://docs.ones.cn/assets/images/052b47cdc6f0742d-d3206ddfc33d8ad50cefc2e5fbbca7ef.png)

### 1.3 指定第三方链接查看 SVN 的代码提交详情

由于 SVN 不支持直接在浏览器查看代码提交详情，你需要借助能在浏览器中打开的第三方代码托管工具，例如 Upsource。

ONES 支持通过参数指定第三方链接，以便在 ONES 中查看工作项或迭代关联的代码提交时，能点击打开代码提交详情。如果你有此需求，可以在配置代码关联集成时选择执行参数"link_url"，否则可以不执行"link_url"参数。

![SVN](https://docs.ones.cn/assets/images/0ed68679a59140f0-bc64dab3f1a9aaab16d848e2f1c2f698.png)

### 1.4 移除关联代码仓

如果不需要再获取某代码仓的代码提交数据，你可以移除关联此代码仓。 移除关联代码仓不影响历史已获取的代码提交数据。

![SVN](https://docs.ones.cn/assets/images/cbe4384155b5b162-1dd67ecd117c7021e4f9971d0ebbc089.png)

## 2.代码提交关联工作项

团队成员可以在代码提交 (commit message) 的时候通过输入包含工作项 ID 的方式和工作项进行关联。 目前一次代码提交支持与多个工作项同时进行绑定，请在多个工作项 ID 之间添加空格作为分隔，例如"#1 工作项一 #2 工作项二"。

提交成功后，工作项自动关联代码提交，以便代码提交数据与项目管理结合。你可以在工作项详情的"代码关联"栏位查看代码关联结果。

![SVN](https://docs.ones.cn/assets/images/712e0cc6907e8de3-c785e7eeb1b6959d8ec4350b65c8f261.png)

迭代支持汇总需求已关联的代码提交数据，迭代负责人可以据此跟进开发进展。

![SVN](https://docs.ones.cn/assets/images/2270d0bfd6954d60-5c9778ba19547284260a9d2bb9ae2636.png)

此外，如果你在配置代码关联集成的时候，指定了"查看 SVN 代码提交详情"的第三方链接。你可以点击 Commit ID 查看此次代码提交的详情。 注意：系统不支持查看历史已关联的 SVN 代码提交详情。

以指定 Upsource 平台的链接为例，点击 Commit ID 打开的代码仓详情页如下图：

![SVN](https://docs.ones.cn/assets/images/4de282ef99289a59-73563ffa9c10c3a6f148e312fa394a53.png)

迭代概览下将汇总统计当前迭代的代码提交情况，帮助迭代负责人评估开发贡献量。 目前支持统计和分析代码提交次数、代码提交次数趋势、代码提交影响行数的情况。

![SVN](https://docs.ones.cn/assets/images/aacd00b4283567c0-6cf13ab794aec595842370507c55a132.png)

## 3.关联代码提交时自动触发工作项状态流转

当开发人员提交代码并关联到ONES工作项时，触发器会自动将其关联的工作项的状态进行流转，而不需要开发人员手动去更改工作项状态，提高开发人员工作效率。

### 3.1 配置工作流触发器

安装「代码集成」应用并在「配置中心」-「代码集成配置」中关联代码仓库后，可以在「项目设置」-「工作项类型」-「工作项工作流」-「编辑步骤」配置中找到「触发器」功能，选择并添加触发器。

- 每个工作流的步骤可配置多个触发器，触发任意一个，状态变更会自动执行；
- 被触发器自动化执行的状态变更会忽略「步骤验证」和「步骤属性」的校验，但「后置动作」会被正常执行。
![SVN](https://docs.ones.cn/assets/images/c397c134bf4848fe-ec0b3a488ac3fdc9baa1234cfcdcd58d.png)

### 3.2 触发器常见问题

1. 无法添加触发器的原因是什么？
- 未安装「代码集成」应用时，无法添加代码开发事件的触发器；
- 如果当前步骤已经添加了某个触发器，则不能重复添加；
- 同一个工作项类型，如果状态A到状态B的步骤已经配置了某个触发器，则状态A到其他状态的步骤不能重复添加该触发器，是为了防止当某个触发事件发生时，系统无法判断应该从状态A流转到哪个状态。
2. 配置触发器后，工作项状态没有流转到预期的目标状态，可能的原因是什么？
- 代码仓是否已关联ONES系统，在未关联的代码仓库中操作无法关联到ONES工作项，从而无法触发工作项状态变更
- 如果流转到目标状态后刚好满足某个流程自动化规则的触发条件，会导致工作项状态进一步流转到其他状态
