如何将文件附件与评论从RTC迁移至TFS 2018?
用TFS 2018 REST API迁移RTC/CCM附件和评论的可行方案
绝对可以用TFS 2018的REST API搞定附件和评论的迁移!我之前帮团队做过类似的跨工具迁移,分享下亲测有效的思路和步骤:
一、迁移评论的具体操作
首先得从Rational RTC/CCM导出评论数据:你可以用RTC自带的scm命令行工具,或者调用RTC的REST API,把每个工作项的评论内容、创建时间、创建人、关联工作项ID这些信息导出成JSON/CSV这类结构化数据。
然后用TFS的REST API把评论同步到对应工作项:
- 目标API端点:
POST https://{你的TFS服务器地址}/DefaultCollection/_apis/wit/workitems/{工作项ID}/comments?api-version=3.0 - 请求体示例(JSON格式):
{ "text": "这里填从RTC导出的原评论内容", "createdDate": "2023-05-10T09:20:30Z", // 原评论创建时间,需转为ISO 8601格式 "createdBy": { "displayName": "原作者姓名", "uniqueName": "user@your-domain.com" // TFS中对应用户的邮箱/唯一标识 } }
如果RTC的评论是富文本格式,直接把HTML内容放到text字段里即可,TFS 2018会自动解析显示。
二、迁移附件的两步走流程
附件迁移需要先上传到TFS存储,再关联到对应工作项:
上传附件到TFS
- API端点:
POST https://{你的TFS服务器地址}/DefaultCollection/_apis/wit/attachments?api-version=3.0&fileName={附件文件名} - 请求头需设置
Content-Type: application/octet-stream,请求体为附件的二进制内容。 - 调用成功后会返回一个附件唯一URL,格式类似
vstfs:///WorkItemTracking/Attachment/xxxx-xxxx-xxxx-xxxx,务必保存好这个URL。
- API端点:
关联附件到工作项
- API端点:
PATCH https://{你的TFS服务器地址}/DefaultCollection/_apis/wit/workitems/{工作项ID}?api-version=3.0 - 请求体示例(JSON数组格式):
- API端点:
[ { "op": "add", "path": "/fields/System.AttachedFile", "value": "附件1.pdf;vstfs:///WorkItemTracking/Attachment/xxxxxx" } ]
如果一个工作项有多个附件,把所有附件的「文件名;URL」用分号分隔放到value里即可,比如"附件1.pdf;URL1;附件2.docx;URL2"。
三、避坑小贴士
- 用户映射提前处理:确保RTC里的用户在TFS中已有对应账号,或提前创建用户别名,否则评论创建人会显示为执行迁移的账号,无法保留原作者信息。
- 用脚本批量处理:手动逐个迁移效率太低,建议写个简单脚本(Python、PowerShell都行),批量读取RTC导出的数据,循环调用TFS API完成迁移。
- 先做小范围测试:挑几个不同类型的工作项做迁移测试,验证评论的格式、时间、作者,以及附件的下载完整性,没问题再全量迁移。
内容的提问来源于stack exchange,提问作者mangel
相关产品推荐
相关产品推荐

