TFS创建了一个带有几个GB的.gz文件的$tf文件夹,我可以安全地删除它吗?

51

我正在使用带有Microsoft TFS 2012的Visual Studio 2012。

在我的驱动器上创建的工作区中,会创建一个名为$tf的隐藏文件夹。我怀疑是TFS创建了这个文件夹。它正在占用磁盘空间,因为目前的大小已经达到数千兆字节,相当于完整工作区所需总占用磁盘空间的25%。因此,这个隐藏的$ tf 文件夹非常巨大。

它的结构是这样的:

c:\workspace\$tf\0\{many files with guid in filename}.gz
c:\workspace\$tf\1\{many files with guid in filename}.gz

有人知道是否可以安全删除这个$tf文件夹,或者是否绝对必须跟踪工作区内的更改?


在 VSTS 构建的发布工件步骤中,您可以通过在复制文件任务期间排除它来摆脱此问题。更多信息请参见:https://github.com/Microsoft/azure-pipelines-agent/issues/859 - tom redfern
4个回答

65
TFS会在工作区中保存所有文件的哈希值和一些额外信息,以便对本地工作区进行更改跟踪,并快速检测文件的更改。它还包含您文件的压缩基线。二进制文件和已经压缩的文件将占用相当大的空间。简单的.cs文件应该保持非常小(取决于您的FAT/NTFS簇大小)。
如果您想摆脱这些文件,则将工作区类型设置为“服务器工作区”,但会失去本地工作区的优势
删除这些文件只是暂时的,因为一旦执行获取操作,TFS就会强制重新创建它们。
您可以通过执行以下几个操作来减小此文件夹的大小:
  • 创建小型、有针对性的工作空间(只选择你需要做出更改所需的项目)
  • 隐藏文件夹,排除包含不需要的项目的文件夹。特别是包含大量大型二进制文件的文件夹。
  • 将依赖项放在 NuGet 包中,而不是将它们检入源代码控制。
  • 将 TFS 工作区放在具有较小 NTFS/FAT 簇大小的驱动器上(如果你只有 1KB 文件,则簇大小为 64Kb 将严重增加所需的磁盘空间量)。

要设置服务器工作区,请更改高级工作区设置部分中的隐藏设置: enter image description here


这个方法可行。我之前尝试过在服务器级别上操作,但现在我意识到那是错误的级别。当打开一个项目集合时,也有可能通过在“团队资源管理器”中设置选项来在服务器级别上工作: 团队资源管理器 > 设置 > 团队项目集合 > 源代码控制 > 工作区设置 > 服务器,但这并不适用于整个工作区。使用您的解决方案要好得多。 - Nico Lubbers
那个设置会为新工作区设定默认值,但现有的工作区将保持其原始配置。你甚至可以将其设置为本地,而不受项目集合设置的影响。尽管如此,我更喜欢本地工作区,只需要去掉只读位就足够了 :)。 - jessehouwing

8

简单回答:我曾经删除过$tf文件夹,结果是新添加的文件显示在我的待处理更改中,但当我更改现有文件时,更改不会显示在我的待处理更改中。因此,我不建议删除这个文件夹。


这个 $tf 文件夹在哪里? - Sami

2
回答原问题,答案是肯定的。但是,为了让TFS跟踪更改,需要重新创建它,尽管只有较少的文件夹和更小的磁盘空间。操作步骤如下:
  1. 首先删除当前工作区文件夹中所有的tf$文件夹。
  2. 然后将原始文件夹中剩余的所有内容移动到另一个空文件夹中,最好是在另一驱动器上;
  3. 对原始(现在为空)工作区文件夹执行“获取最新版本”操作(这将导致在该原始文件夹中创建一个单独的tf$文件夹)。
  4. 现在将您在备份文件夹中移动的所有内容复制到原始工作区文件夹中“获取最新版本”的结果之上。
按照这个顺序执行这些步骤,您将得到TFS所需的tf$条目,但只有一个文件夹,并且更加紧凑 - 此外,您进行的任何未经检入的更改的增量都将被保留,TFS将识别它们为待处理更改。
我们的Certitude AMULETs C++解决方案中有72个高级项目,我们每个月都要执行此操作,以保持编译和搜索速度合理。

0

我删除了$tf目录,然后GetLatest表现正常 - 它询问我是否要保留本地文件还是替换为服务器上的文件。然后我可以像往常一样进行检查。

稍微有点烦人的是,我本地有大约30个文件被我告知要忽略,但它们出现了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接