簡體   English   中英

在TFS中取消“獲取最新版本”是否有效?

[英]Does canceling “get latest version” work in TFS?

我選擇從TFS連接的解決方案中獲取最新版本,然后按“取消”,此操作是否具有事務性,我的意思是取消“獲取最新版本”命令會取消整個操作或獲取一些代碼並取消其余文件?

我的機器:

TFS 2010

VS 2010 SP1

TL; DR:是的,有可能進入一種狀態,其中工作文件夾中的某些文件位於請求的變更集,而某些文件位於其先前的變更集。 為了“回滾”到該版本,您可能希望詳細了解您所使用的先前版本。

要查看發生了什么,我們可以將其分解為獲取時執行的實際步驟:

首先,客戶端要求服務器獲取特定版本。 服務器將計算需要傳輸哪些文件,以將您從當前的變更集帶到您請求的變更集。 它將作為一系列“獲取操作”返回給客戶端。

此時,客戶端應產生多個線程以服務於get操作。 這些線程中的大多數將是下載數據並將其放置在磁盤上的線程。 將有一個附加線程專門用於向服務器發送“本地版本更新”。

下載線程使get操作脫離服務器返回的列表,並將其下載到磁盤上的臨時位置。 下載完成后,他們會將其移至其永久位置,並通知發送本地版本更新的線程文件已完全下載。

本地版本更新線程將批處理來自下載器線程的本地版本更新,直到達到某個固定數目為止,因為本地版本更新消息非常小,並且一次發送一次將導致不必要的網絡開銷。 一旦本地版本更新線程積累了足夠的更新,它們將被發送到服務器。 這是服務器知道客戶端具有他們請求的文件版本的時候。

下載線程將繼續為獲取操作提供服務,直到沒有更多要處理的內容為止,本地版本更新線程將繼續直到所有下載線程完成下載並且所有本地版本更新已發送到服務器為止。 一旦發生這些,獲取就完成了。

如果客戶端支持取消,則其邏輯應如下:如果用戶請求取消(例如,通過在基於UI的客戶端中按下“取消”按鈕),則應通知所有下載工作線程取消。 如果他們正在下載文件,則應立即停止(只是丟棄正在讀取的HTTP響應。)但是,一旦將文件從其臨時位置移動到其永久位置,則必須通知本地版本在退出之前更新線程。 本地版本更新線程必須等待所有下載線程完成,然后刷新所有未完成的本地版本更新,然后才能退出。

因此,如果要在獲取過程中取消,則可能在磁盤上有一些您要下載的文件,但是客戶端和服務器應該對每個文件的版本具有一致的看法。

如果要殺死客戶端,使其無法徹底停止工作線程(例如,僅通過關閉計算機電源),則可能會進入將項目提交到磁盤的狀態但是客戶端尚未將本地版本更新刷新到服務器。 在這種情況下,您可能在磁盤上擁有一個版本,而服務器認為您擁有另一個版本。 萬一發生這種情況,在獲取此文件以解決此問題時,您需要使用“強制”選項。

它不是事務性的。 有些文件可能已經下載。 在這種情況下,您應該在取消請求后獲得特定版本。

以我的經驗,按“取消”會在磁盤上的版本與TFS認為磁盤上的版本之間產生差異。 因此,如果您嘗試再次更新,則不會下載任何內容,因為服務器認為您已經擁有最新版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM