修改TFS变更集的CreationDate
我目前正在创建一个从一个版本控制系统到TFS的迁移工具,并且正在使用修改TFS变更集的CreationDate,tfs,migration,changeset,Tfs,Migration,Changeset,我目前正在创建一个从一个版本控制系统到TFS的迁移工具,并且正在使用Microsoft.TeamFoundation.Client程序集,遇到了一个问题。我可以模拟每个变更集的更改,但是CreationDate属性是通过签入方法自动生成的,如下所示: var changeSetId = workspace.CheckIn(pendingChanges, userName, comment, note, null, null); 然后,我可以按签入方法返回的ID加载变更集对象: var chan
Microsoft.TeamFoundation.Client
程序集,遇到了一个问题。我可以模拟每个变更集
的更改,但是CreationDate
属性是通过签入
方法自动生成的,如下所示:
var changeSetId = workspace.CheckIn(pendingChanges, userName, comment, note, null, null);
然后,我可以按签入方法返回的ID加载变更集
对象:
var changeSet = workspace.VersionControlServer.GetChangeset(changeSetId);
我正试图在变更集中设置创建日期
(而非只读),我可以通过以下代码进行设置:
changeSet.CreationDate = legacyLog.Date;
changeSet.Update();
但是,调用Update
方法后,更改不会保存在服务器上,因为我已尝试在浏览器中验证日期,并且它仍然将今天的日期显示为CreationDate
(除非我误解了该日期的显示/呈现位置)。之前是否有人试图更改变更集的创建日期
,或者我的做法是否完全错误?我同意DaveShaw的观点,您需要直接在TFS数据库中修改变更集的签入时间。SQL语句:更新tbl_变更集CreationDate='?'其中变更集ID='?'
有关详细信息,请查看此链接上的ModifyCheckinDate2012源代码:
但是,请注意,不建议直接在TFS数据库中进行修改,因为这可能会带来一些潜在风险 完全不支持更新变更集日期。TFVC服务器对象确保始终按时间顺序创建变更集,并基于此保证进行一些假设
历史记录、稀疏存储和报告也使用这一基本规则。这也是为什么仍然无法合并来自不同集合的两个团队项目的原因之一
我与产品团队进行了核实,以确定他们的回答:
是的,我们当然在TFVC代码中做了这个假设
因此,在更改日期时,必须考虑一些未公开记录的规则。否则,您的数据库将来可能无法升级,或者在您尝试跳转时无法导入到VST中
如果您需要进行这些更改,最好的解决方案是与Microsoft支持部门联系,以便他们为您提供执行正确一致性检查的脚本。我知道您可以在数据库中修改它们,但它不受支持,可能会导致一些意外问题-在服务器丢失时间设置并进入未来后,我不得不修改1或2个更改集日期:)日期更改后,日期是否正确显示在TFS的web界面中?不确定web是否正确,但在VS中,它们是正确的,我想我确实尝试过了,一切看起来都很好。感谢Vicky和@Daveshaw的提示,这是非常危险的,因为数据库隐式地利用了所有变更集编号都是按时间顺序排列的这一事实。