【问题标题】:Does canceling "get latest version" work in TFS?取消“获取最新版本”在 TFS 中有效吗?
【发布时间】:2012-11-09 16:40:33
【问题描述】:

我已选择从 TFS 连接的解决方案获取最新版本,然后按下取消,此操作是否具有事务性,我的意思是取消获取最新版本命令会取消整个操作或获取部分代码并取消剩余文件?

我的机器:

TFS 2010

VS 2010 SP1

【问题讨论】:

  • 您可能想指定 tfs 2010。我怀疑它是事务性的。

标签: c# .net visual-studio tfs


【解决方案1】:

TL;DR: 是的,您的工作文件夹中的某些文件位于请求的变更集中,而某些文件位于其先前的变更集中,这是可能的。您可能希望获取特定的先前版本,以便“回滚”到该版本。

要查看发生了什么,我们可以将其分解为执行 get 时正在执行的实际步骤:

首先,客户端要求服务器获取特定版本。服务器将计算需要传输哪些文件才能将您从当前的变更集带到您请求的变更集。它将这些作为一系列“获取操作”返回给客户端。

此时,客户端应该生成多个线程来服务于 get 操作。这些线程中的大多数将是下载数据并将其放置在磁盘上的线程。将有一个额外的线程专门用于向服务器发送“本地版本更新”。

下载线程将 get 操作从服务器返回的列表中取出,并将其下载到磁盘到一个临时位置。下载完成后,他们会将其移动到其永久位置,并通知发送本地版本更新的线程该文件已完全下载。

本地版本更新线程将批处理来自下载程序线程的本地版本更新,直到达到某个固定数量,因为本地版本更新消息非常小并且一次发送一个会导致不必要的网络开销。一旦本地版本更新线程积累了足够的更新,它们就会被发送到服务器。这是服务器知道客户端拥有他们请求的文件版本的点。

下载线程将继续为获取操作提供服务,直到没有更多要处理的内容,并且本地版本更新线程将继续,直到所有下载线程完成下载并且所有本地版本更新都已发送到服务器。一旦这些发生,get 就完成了。

如果客户端支持取消,其逻辑应该如下:如果用户请求取消(例如,通过在基于 UI 的客户端中按下“取消”按钮),则应通知所有下载工作线程取消。如果他们正在下载文件,他们应该立即停止(只是丢弃他们正在读取的 HTTP 响应。)但是,一旦他们将文件从临时位置移动到永久位置,他们必须通知本地版本在他们退出之前更新线程。本地版本更新线程必须等待所有下载线程完成,然后在退出之前刷新所有未完成的本地版本更新。

因此,如果您在获取过程中取消,您可能在磁盘上有一些您尝试下载的文件,但客户端和服务器应该对每个文件的版本有一致的看法.

如果您要杀死客户端,使其无法彻底停止工作线程(例如,通过简单地关闭计算机电源),那么您可能会进入项目已被删除的状态已提交到磁盘,但客户端尚未将本地版本更新刷新到服务器。在这种情况下,您可能在磁盘上有一个版本,而服务器认为您有不同的版本。万一发生这种情况,您需要在获取此文件时使用“强制”选项来协调此问题。

【讨论】:

    【解决方案2】:

    它不是事务性的。有些文件可能已经下载。在这种情况下,您应该在取消请求后获得特定版本。

    【讨论】:

    • 非常感谢,但是你能给我一些资源吗,非常非常关键!
    • 我不能给你一些资源,因为这个答案是基于我的经验。我经常遇到这种情况,以至于我取消了最新版本并最终得到了混合版本。
    【解决方案3】:

    根据我的经验,按“取消”会在您磁盘上的版本与 TFS 认为您在磁盘上的版本之间产生差异。因此,如果您再次尝试更新,则不会下载任何内容,因为服务器认为您已经拥有最新版本。

    【讨论】:

    • 你的意思是文件不会被改变?但是服务器会计算它们是否已更改?
    • 如果您有旧版本的文件应该使用“获取最新”进行更新,但由于取消而被跳过,服务器将认为您已经拥有最新版本,并且不会在下一次“获取最新”时更新"。
    • 我会做一个测试并回复!
    猜你喜欢
    • 2013-05-09
    • 2014-11-22
    • 1970-01-01
    • 2011-11-04
    • 2016-09-08
    • 1970-01-01
    • 2016-10-09
    • 2017-02-26
    • 1970-01-01
    相关资源
    最近更新 更多