2012-11-21 56 views
2

我選擇從TFS連接的解決方案中獲得最新版本,並按下了取消,是本公司經營事務,我的意思是取消獲取最新版本命令取消整個操作或得到一些代碼,並取消剩餘的文件?取消「獲取最新版本」在TFS中工作?

我的機器:

TFS 2010

VS 2010 SP1

+0

你可能想指定tfs 2010.我懷疑它是事務性的。 – kush

回答

2

TL; DR:是的,您可能會進入工作文件夾中的某些文件位於請求的更改集並且某些文件位於其以前的更改集的狀態。您可能希望詳細瞭解您之前的版本,以便「回滾」到該版本。

要看到發生了什麼,我們可以將其分爲當你做一個GET正在執行的實際步驟:

首先,客戶端要求服務器以獲取特定版本。服務器將計算需要傳輸哪些文件,以使您可以從當前變更集中獲得所需的變更集。它會將這些作爲一系列「獲得操作」返回給客戶。

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

下載線程採取get操作關閉的服務器返回的列表,並將其下載到磁盤到一個臨時位置。下載完成後,他們會將其移入永久位置,並通知發送本地版本更新的線程該文件已完全下載。

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

下載線程將繼續服務中獲得操作,直到沒有更多要處理,和本地版本更新線程將繼續,直到所有的下載線程完成下載和當地所有的版本更新已經被髮送到服務器。一旦這些發生,獲得已完成。

如果客戶端支持取消,其邏輯應該如下:如果用戶請求取消(例如,通過在基於UI的客戶端中按下「取消」按鈕),則應通知所有下載工作者線程取消。如果他們在下載文件的中間,應立即停止(只是丟棄他們正在閱讀的HTTP響應。)然而,一旦他們已經從它的臨時位置複製到其固定位置,他們必須通知當地版本在退出之前更新線程。本地版本更新線程必須等待所有下載線程完成,然後在可能退出之前清除所有未完成的本地版本更新。因此,如果您要取消獲取中,您可能會有一些文件在磁盤上,您嘗試下載,但客戶端和服務器應該有一個一致的視圖文件。

如果您要殺死客戶端,使其無法乾淨地停止工作線程(例如,通過簡單地關閉計算機的電源),那麼您可能會進入一個狀態,已被提交到磁盤,但客戶端尚未將本地版本更新刷新到服務器。在這種情況下,您可能有一個版本在磁盤上,而服務器相信您有不同的版本。萬一發生這種情況,在獲取此文件以解決此問題時,您需要使用「強制」選項。

1

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

+0

非常感謝,但是你能否給我一些資源,這非常非常重要! –

+0

我不能給你一些資源,因爲這個答案是根據我的經驗。我經常使用它,以至於我取消了最新版本,並以混合版本結束。 – user1793714

1

在我的經驗,按「取消」創建TFS認爲你有你的磁盤上你有你的磁盤上的版本,而之間的差異。因此,如果您嘗試再次更新,則不會下載任何內容,因爲服務器認爲您已擁有最新版本。

+0

你的意思是這些文件不會被改變?但服務器會計數他們改變? –

+0

如果您的舊版本文件應該更新爲「獲取最新版本」,但由於取消而被跳過,服務器會認爲您已經擁有最新版本,並且不會在下一個「獲取最新版本」中更新。 – maxim1000

+0

我會做一個測試並回應! –