TFS creates a $tf folder with gigabytes of .gz files. Can I safely delete it?

Solution 1:

TFS keeps a hash and some additional information on all file in the workspace so that it can do change tracking for Local Workspaces and quickly detect the changes in the files. It also contains the compressed baseline for your files. Binary files and already compressed files will clog up quite a bit of space. Simple .cs files should stay very small (depending on your FAT/NTFS cluster size).

If you want to get rid of these, then set the Workspace type to a server workspace, but lose the advantages of local workspaces.

Deleting these files will be only temporarily since TFS will force their recreation as soon as you perform a Get operation.

You can reduce the size of this folder by doing a few things:

  • Create small, targeted workspaces (only grab the items you need to do the changes you need to make)
  • Cloak folders, exclude folders containing items you don't need. Especially folders containing lots of large binary files
  • Put your dependencies in NuGet packages instead of checking them into source control..
  • Put your TFS workspace on a drive with a small NTFS/FAT cluster size (a cluster size of 64Kb will seriously enlarge the amount of disk space required if all you have are 1KB files.

To setup a server workspace, change the setting hidden in the advanced workspace setting section: enter image description here

Solution 2:

The simple answer: I deleted the $tf files once: the net result was that newly added files showed up in my pending changes, but when I changed an existing file, the change did not show up in my pending changes. So I would not recommend deleting this folder.

Solution 3:

To answer the original question, the answer is yes. However, in order for TFS to track changes, it will need to be recreated, albeit with fewer folders and much smaller disk space. To do that:

  1. First delete all the tf$ folders currently in your current workspace folder.
  2. Next, move all of the remaining contents of the original folder to another empty folder, preferably one on another drive;
  3. Perform a "Get latest" into the original (now empty) workspace folder (this will cause a single tf$ folder to be created in that original folder).
  4. Now copy all of the contents you moved into the backup folder over the top of the 'Get latest' results in the original workspace folder.

By performing these steps in that order, you will end up with the tf$ entries TFS needs, but in a single folder and much more compact - additionally, the deltas of any changes you made that had not been checked in will be preserved and TFS will recognize them as pending changes as it should.

Our Certitude AMULETs C++ solution has 72 advanced projects in it, and we have to do this once a month to keep compiling and search speeds reasonable.