【问题标题】:TF.EXE history is off by one if the changeset only contains deletions如果变更集仅包含删除,则 TF.EXE 历史记录减一
【发布时间】:2015-02-11 11:15:17
【问题描述】:

我想在我的工作区中获取当前的变更集 ID。这个问题在“Get current changeset id on workspace for TFS”中得到解决。

tf history . /r /noprompt /stopafter:1 /version:W

这几乎适用于所有情况。但是,如果当前变更集仅包含 TFS 中的删除,则此操作将失败。这不一定是changesetId - 1,而是取决于我查询的文件/文件夹的历史记录。 如果当前变更集仅删除了几个文件,则变更集优先于我查询的文件/文件夹历史记录中的当前变更集。

当我使用http://blogs.msdn.com/b/buckh/archive/2009/01/26/how-to-determine-the-latest-changeset-in-your-workspace.aspx 中提到的 TFS API 调用时,也会发生同样的事情

这是 TFS 中的错误吗?有人有解决办法吗?

提前致谢。

【问题讨论】:

    标签: visual-studio-2013


    【解决方案1】:

    这里的关键是你指定的版本是W,意思是工作区。历史查询正在查找您在工作区中所做的更改。问题是你永远不能“拥有”一个所有文件都被删除的变更集——它们不会在你的工作区中。 get 的工作方式是它计算您需要的内容并将其与您拥有的内容(全部在 SQL 中)进行比较,并将差异列表发送给客户端。结果,服务器上没有任何内容记录您的客户端已经处理了这些删除的事实。为了解决这个问题,我们必须运行 get 逻辑来检查这个极端情况。所以,你是对的,在这种情况下它是错误的。我会问团队,但除非有更好的方法来解决它,我没有想到,我不打算改变它。

    【讨论】:

    • 我已经用 API 实现了一个变通方法。当我从 QueryHistory() 获得结果时,我会检查是否存在比该变更集更新的变更集。如果较新的变更集仅包含删除,我会检查已删除的文件是否存在于本地磁盘上。当变更集仅包含删除并且文件不存在于本地磁盘上时,我不断重复这一点。我找到的最后一个只有删除且没有文件的变更集必须是正确的。
    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多