2015-08-17 63 views
6

當我打開我的Visual Studio,並從我們的TFS一個解決方案,我有如下的輸出窗口消息:如何獲取TFS本地工作區中項目的計數?

TF401190:本地工作區[MACHINE_NAME; USER_NAME]有 158412物品在裏面,這超過了建議限制爲100000 項目。要提高性能,請減少工作區中的 中的項目數,或將工作區轉換爲服務器工作區。

這不是一個錯誤,而是一個警告,我可以正常工作,雖然我覺得在我的工作中有真正的性能打擊。

爲了解決這個問題,我想一方面「掩飾」我不使用的單個分支/文件夾。另一方面,我不想掩飾太多,一般來說我想知道是否有一些文件夾中有不必要的文件。

問題:是否有TFS控制檯/ PowerShell命令或某些內容來檢索TFS Local Workspace中可從Visual Studio客戶端計算機執行的項目數?就像Treesize-App一樣,但對於TFS?

我google了一下,但沒有發現任何真正有用的東西。 I found this on MSDN,這證實了我收到郵件的原因,但它沒有提供任何解決方案。 Here是一個試圖做某些事情的人,但是該項目從未將其編碼爲afaik。

我們的團隊使用VS2013更新5/TFS 2013更新5

您的幫助表示讚賞。

+0

爲什麼不在你的本地工作區使用Treesize?例如C:\ TFS \ MySuperLargeTeamProject)您也可以使用非遞歸映射與尾隨/ *(https://msdn.microsoft.com/en-us/library/ms181378(v=vs.120).aspx) – rerwinX

+1

那麼,本地的Treesize-Check也會顯示和計算所有非託管文件,如構建,resharper設置,$ tf工件等......你知道我的意思嗎? – KarmaEDV

回答

5

您可以這樣做,例如TFS的API:

var uri = new Uri("https://tfs.mydomain.com/tfs/myteamprojectcollection") 
var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(uri); 
var vcs = tpc.GetService<VersionControlServer>(); 

var itemSet = vcs.GetItems("$/MyServerPath",RecursionType.Full); 

Console.WriteLine(itemSet.Items.Length); 

你可以把它變成一個控制檯應用程序,或者如果你改變了語法,它也可以稱爲PowerShell腳本。

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") 
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.VersionControl.Client") 

$url = "https://tfs.mydomain.com/tfs/myteamprojectcollection"; 
$tfs = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($url) 
$vcs = $tfs.GetService([Microsoft.TeamFoundation.VersionControl.Client.VersionControlServer]) 
$set = $vcs.GetItems("$/MyServerPath", [Microsoft.TeamFoundation.VersionControl.Client.RecursionType]::Full) 

Write-Host $set.Items.Length 
+0

非常感謝!希望我能給1個以上Upvote! – KarmaEDV