我目前正在创建一个从一个版本控制系统到TFS的迁移工具,并且正在使用Microsoft.TeamFoundation.Client
程序集并遇到了问题。我能够模仿每个Changeset
的更改,但CreationDate
属性是由CheckIn
方法自动生成的,如下所示:
var changeSetId = workspace.CheckIn(pendingChanges, userName, comment, note, null, null);
然后我可以按Changeset
方法返回的ID加载CheckIn
对象:
var changeSet = workspace.VersionControlServer.GetChangeset(changeSetId);
我正在尝试在CreationDate
中设置Changeset
(非只读),我可以通过以下代码执行此操作:
changeSet.CreationDate = legacyLog.Date;
changeSet.Update();
但是,在调用Update
方法后,更改未保存在服务器上,因为我尝试在浏览器中验证日期,但它仍然显示今天的{{1}日期(除非我误解了显示/呈现日期的位置)。是否有人曾尝试更改CreationDate
之前的CreationDate
或我是否认为这一切都错了?
答案 0 :(得分:1)
我同意DaveShaw,您需要直接修改变更集在TFS数据库中的登记时间。 SQL语句:UPDATE tbl_Changeset SET CreationDate ='?'在哪里ChangeSetId ='?'
请查看此链接上的ModifyCheckinDate2012源代码以获取详细信息:https://tfsprod.codeplex.com/SourceControl/latest
但是,请注意,不建议直接在TFS数据库中进行修改,因为这可能会带来一些潜在的风险。
答案 1 :(得分:1)
更新变更集日期完全不支持。 TFVC服务器对象确保始终按时间顺序创建变更集,并根据此保证做出一些假设。
历史,稀疏存储和报告也使用了这一基本规则。这也是为什么仍然无法合并来自不同系列的两个团队项目的原因之一。
我与产品团队确认了他们的回复:
是的,我们当然在TFVC代码中做出了这个假设。
因此,在更改日期时,必须考虑许多未公开记录的规则。否则,您的数据库将来可能无法升级,或者当您进行跳转时无法将其导入VSTS。
如果您需要进行这些更改,最佳解决方案是与Microsoft支持部门联系,以便他们为您提供执行正确一致性检查的脚本。