取消“获取最新版本”在TFS中工作吗?

时间:2012-11-21 12:19:34

标签: c# .net visual-studio tfs tfs2010

我选择从TFS连接解决方​​案中获取最新版本,并按下取消,此操作是事务性的,我的意思是取消获取最新版本命令取消整个操作或获取一些代码并取消剩余文件?< / p>

我的机器:

2010年TFS

VS 2010 SP1

3 个答案:

答案 0 :(得分:2)

TL; DR:是的,可能会进入一种状态,即工作文件夹中的某些文件位于请求的变更集中,而某些文件位于其先前的变更集中。您可能希望详细了解您以前的版本,以便“回滚”到该版本。

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

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

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

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

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

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

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

因此,如果你要在get中间取消,你可能有一些你试图下载的磁盘上的文件,但是客户端和服务器应该具有每个文件版本的一致视图

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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