我有一个Team Foundation Server,它可用的磁盘空间有限。为了维护它,我需要删除它存储的旧版本文件。
理想情况下,我只希望它删除版本,如果:
我该怎么做?
答案 0 :(得分: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
如果您确实要重置版本历史记录,可以将代码分支到干净的团队项目,然后停用旧版本。
答案 1 :(得分: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