修改 TFS 变更集的创建日期

Modify CreationDate for TFS Changeset

我目前正在创建一个从一个版本控制系统到 TFS 的迁移工具,并且我正在使用 Microsoft.TeamFoundation.Client 程序集并且 运行 遇到了问题。我能够模拟每个 Changeset 的变化,但是 CreationDate 属性 是由 CheckIn 方法自动生成的,如下所示:

var changeSetId = workspace.CheckIn(pendingChanges, userName, comment, note, null, null);

然后我可以通过 CheckIn 方法返回的 ID 加载 Changeset 对象:

var changeSet = workspace.VersionControlServer.GetChangeset(changeSetId);

我正在尝试在 Changeset 中设置 CreationDate(非只读),我可以通过以下代码实现:

changeSet.CreationDate = legacyLog.Date;
changeSet.Update();

但是,在调用 Update 方法后,更改没有保存在服务器上,因为我试图在浏览器中验证日期,它仍然显示今天的日期为 CreationDate (除非我误解了那个日期 displayed/rendered)。之前有没有人试图将 CreationDate 更改为 Changeset 还是我这样做全错了?

我同意DaveShaw 的观点,您需要直接修改TFS 数据库中变更集的签入时间。 SQL 语句:UPDATE tbl_Changeset SET CreationDate='?' WHERE ChangeSetId='?'

详情请查看link上的ModifyCheckinDate2012源码​​:https://tfsprod.codeplex.com/SourceControl/latest

但需要注意的是,不建议直接在TFS数据库中修改,这可能会带来一些潜在的风险。

更新变更集日期完全不支持。 TFVC 服务器对象确保变更集始终按时间顺序创建,并基于此保证做出一些假设。

历史、稀疏存储和报告也利用了这个基本规则。这也是为什么仍然无法合并来自不同集合的两个团队项目的原因之一。

我与产品团队确认过,他们的回复:

Yes, we certainly make that assumption in the TFVC code.

因此,在更改日期时,必须考虑许多未公开记录的规则。否则您的数据库将来可能无法升级,或者在您进行跳跃时无法导入 VSTS。

如果您需要进行这些更改,最好的解决方案是联系 Microsoft 支持,以便他们为您提供执行正确一致性检查的脚本。