【问题标题】:Modify CreationDate for TFS Changeset修改 TFS 变更集的 CreationDate
【发布时间】:2017-12-12 22:56:05
【问题描述】:

我目前正在创建从一个版本控制系统到 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(除非我误解了在哪里该日期显示/呈现)。之前有没有人尝试过将CreationDate 更改为Changeset,或者我是否将这一切都搞错了?

【问题讨论】:

  • 我知道您可以在数据库中修改它们,但它不受支持并且可能会导致一些意外问题 - 在服务器丢失时间设置并进入未来后,我不得不修改 1 或 2 个变更集日期:)
  • 日期更改后,日期在 TFS 的 Web 界面中是否正确显示?
  • 不确定网络,但我认为在 VS 中它们是正确的

标签: tfs migration changeset


【解决方案1】:

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

详情请查看此链接上的 ModifyCheckinDate2012 源代码:https://tfsprod.codeplex.com/SourceControl/latest

但请注意,不建议直接在 TFS 数据库中进行修改,因为这可能会带来一些潜在的风险。

【讨论】:

  • 我试过了,一切看起来都不错。感谢 Vicky 和@DaveShaw 的提示
  • 这是非常危险的,因为数据库隐含地利用了所有变更集编号按时间顺序排列的事实。
【解决方案2】:

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

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

我与产品团队确认,他们的回应是:

是的,我们当然会在 TFVC 代码中做出这样的假设。

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

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

【讨论】:

    猜你喜欢
    • 2016-08-01
    • 2020-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2012-09-15
    相关资源
    最近更新 更多