Microsoft Git Virtual File System

According to Microsoft, the GVFS allows the Git client to scale to repos of any size, by “virtualizing the file system beneath your repo and makes it appear as though all the files in your repo are present,” while in reality it “only downloads a file the first time it is opened.”

As Saeed Noursalehi from Microsoft explains in the official announcement, “GVFS also actively manages how much of the repo Git has to consider in operations like checkout and status, since any file that has not been hydrated can be safely ignored,” adding that this is all done at the file system level, which means “IDEs and build tools don’t need to change at all.”

Microsoft illustrates the benefit of the Git Virtual File System with the example of their Windows codebase which according to the company consists of “over 3.5 million files and is over 270 GB in size.”

“In a repo that is this large, no developer builds the entire source tree. Instead, they typically download the build outputs from the most recent official build, and only build a small portion of the sources related to the area they are modifying. Therefore, even though there are over 3 million files in the repo, a typical developer will only need to download and use about 50-100K of those files.”

By using GVFS for such a huge project, Microsoft says that important tasks such as cloning, checkout and status can be speeded up dramatically.

“With GVFS, this means that they now have a Git experience that is much more manageable: clone now takes a few minutes instead of 12+ hours, checkout takes 30 seconds instead of 2-3 hours, and status takes 4-5 seconds instead of 10 minutes. And we’re working on making those numbers even better.”

The company is open-sourcing a pre-release of the Git Virtual File System client code on GitHub, where everybody can download and try it. But as GVFS relies on a “pre-release file system driver”, they recommend to test it in virtual machine and not any real production environment. The needed driver binaries are also available for preview as a NuGet package on GitHub.

To allow Git to work well on a GVFS-backed repo, two more things are needed: