2012-02-16 97 views
2

我有一個Team Foundation Server,它具有有限的可用磁盤空間。爲了維護它,我需要刪除它存儲的舊版本的文件。如何讓TFS自動刪除舊版本的文件?

理想情況下,我只希望它刪除的版本,如果:

  1. 它比特定日期的,並且
  2. 它有一個最低的

15個版本我如何做這個?

+2

HDD比從TFS數據庫中刪除舊版本的文件更安全。 – DaveShaw 2012-02-16 09:08:35

+0

什麼是硬盤驅動器?你能給我一些更多的信息嗎? – 2012-02-16 10:04:09

+0

硬盤是硬盤驅動器。我認爲戴夫就在這裏。如果從現有的源代碼管理項目的tfs中刪除舊版本,這將是一個非常糟糕的主意。 – jessehouwing 2012-02-16 10:49:00

回答

4

沒有標準的方法來做到這一點,這是有原因的。 TFS通常會嘗試只存儲基本文件和其上的差異,因此如果您開始刪除較舊的版本,則不會獲得太多收益。至多是這兩個版本的差異的大小。

升級TFS服務器的磁盤空間絕對是這裏的長期解決方案。

如果您必須減小項目的大小,請考慮銷燬不再使用的舊分支。 You can destroy whole files and folders which will remove them and the history associated to them from TFS。默認情況下,您只能通過命令行訪問此功能,並且您需要擁有銷燬TFS中項目的權限。 There is an extension for the Source Control Explorer that adds the Destroy command to the context menu in Visual Studio

如果您從Team Build服務器運行自動化測試,則測試附件也可能是您的TFS服務器超出其分配空間的原因。 Microsoft released a command line utility to clean up the Test Attachments

如果你真的想重置版本歷史,你可以將你的代碼分支到一個乾淨的團隊項目,然後停用舊版本。

2

您還應該確定TFS的哪個組件使用的磁盤空間最多。

您可以在Tfs_Collection數據庫上運行以下SQL查詢以查看哪些表消耗的空間最多。

-- Table rows and data sizes 
CREATE TABLE #t ( [name] NVARCHAR(128), [rows] CHAR(11), reserved VARCHAR(18),  data VARCHAR(18),  index_size VARCHAR(18), unused VARCHAR(18)) 
GO 

INSERT #t 
EXEC [sys].[sp_MSforeachtable] 'EXEC sp_spaceused ''?''' 
GO 

SELECT 
    name as TableName, 
    Rows, 
    ROUND(CAST(REPLACE(reserved, ' KB', '') as float)/1024,2) as ReservedMB, 
    ROUND(CAST(REPLACE(data, ' KB', '') as float)/1024,2) as DataMB, 
    ROUND(CAST(REPLACE(index_size, ' KB', '') as float)/1024,2) as IndexMB, 
    ROUND(CAST(REPLACE(unused, ' KB', '') as float)/1024,2) as UnusedMB 
FROM #t 
ORDER BY CAST(REPLACE(reserved, ' KB', '') as float) DESC 
GO 

DROP TABLE #t 
GO 

如果您使用的是Microsoft Test Manager,則可能測試附件使用的空間比您想象的要多。看看這個博客文章,瞭解更多關於如何解釋這個查詢以及怎麼做的信息:TFS2010: Test Attachment Cleaner and why you should be using it

+0

非常感謝Grant!我將運行此腳本並回復給您。我休息了一週,稍後我會回答問題。謝謝 :) – 2012-02-19 16:28:49