取消"get latest version"在 TFS 中是否有效?



我已经选择从TFS连接的解决方案中获取最新版本,并按了cancel,这个操作是事务性的吗?我的意思是,cancel get latest version命令是取消整个操作,还是获取部分代码并取消其余文件?

我的机器:

TFS 2010

与2010年SP1

TL;DR:是的,您的工作文件夹中的某些文件可能处于请求的变更集,而某些文件则处于其上一个变更集。为了"回滚"到该版本,您可能希望对以前的版本进行特定的获取。

为了了解发生了什么,我们可以将其分解为当您执行get:时执行的实际步骤

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

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

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

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

下载线程将继续为获取操作提供服务,直到不再需要处理,本地版本更新线程将继续,直到所有下载线程都完成下载,并且所有本地版本更新都已发送到服务器。一旦出现这些情况,获取就完成了。

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

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

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

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

根据我的经验,按下"取消"会在您磁盘上的版本和TFS认为您磁盘上有的版本之间产生差异。所以,若您再次尝试更新,则不会下载任何内容,因为服务器认为您已经有了最新版本。

最新更新