C# 是否取消;获取最新版本“;在TFS工作?

C# 是否取消;获取最新版本“;在TFS工作?,c#,.net,visual-studio,tfs,C#,.net,Visual Studio,Tfs,我已选择从TFS连接的解决方案获取最新版本,并按了“取消”,此操作是事务性的,我的意思是“取消获取最新版本”命令取消整个操作还是获取部分代码并取消其余文件 我的机器: TFS 2010 VS 2010 SP1不是事务性的。某些文件可能已经下载。在这种情况下,您应该在取消请求后获得特定版本。这不是事务性的。某些文件可能已经下载。在这种情况下,您应该在取消请求后获得特定的版本。根据我的经验,按“取消”键会在您的磁盘上的版本和TFS认为您的磁盘上的版本之间产生差异。所以,如果您再次尝试更新,将不会下载

我已选择从TFS连接的解决方案获取最新版本,并按了“取消”,此操作是事务性的,我的意思是“取消获取最新版本”命令取消整个操作还是获取部分代码并取消其余文件

我的机器:

TFS 2010


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

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

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

根据我的经验,按“取消”键会在您磁盘上的版本和TFS认为您磁盘上的版本之间产生差异。所以,如果您再次尝试更新,将不会下载任何内容,因为服务器认为您已经拥有最新版本;DR:是的,可能会进入这样的状态:工作文件夹中的某些文件位于请求的更改集,而某些文件位于其以前的更改集。为了“回滚”到该版本,您可能希望对以前的版本执行特定的操作

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

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

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

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

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

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

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

因此,如果要在GET的中间取消,则可能有一些试图下载的磁盘上的文件,但客户端和服务器应该对每个文件的版本有一致的看法。


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

TL;DR:是的,可能会进入这样的状态:工作文件夹中的某些文件位于请求的更改集,而某些文件位于其以前的更改集。为了“回滚”到该版本,您可能希望对以前的版本执行特定的操作

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

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

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

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