Is there an open source equivalent to piper, Google's version control tool?

Solution 1:

The short answer is no, it doesn't seem to exist.

As you can read in a Quora article, "it’s hard to tell where the version control system ends, and where some of the other parts of the development toolchain begin".

So, first, you need to be clear in what "features" you are interested in since you can be interested in a feature that is not Piper's responsibility.

Also, keep in mind that your server disk space and OS would limit the file count/size before the chosen VCS.

If you need a Centralized VCSs and billions of files, you could go with SVN or OpenCVS.

If you need a Distributed one with thousands of developers and millions of commits, take a look at Git, Bazaar, Bitbucket or Mercurial.

But do you really have all those requirements?

AFAIK there's no Piper's open source equivalent on the market.

In order to better understand Centralized and Distributed VCS, take a look at this Comparison between Centralized and Distributed Version Control Systems

Also, take a look at what is Google's repository like?

Solution 2:

Two recent developments bring Piper-like features to Git: VFS for Git and sparse-checkout.

The first: Microsoft recently open-sourced VFS for Git which feels like it brings some of Piper's monorepo features to Git.

VFS for Git virtualizes the filesystem beneath your Git repository so that Git tools see what appears to be a normal repository when, in fact, the files are not actually present on disk. VFS for Git only downloads files as they are needed.

VFS for Git also manages Git's internal state so that it only considers the files you have accessed, instead of having to examine every file in the repository. This ensures that operations like status and checkout are as fast as possible.

This is used by Microsoft for >4000 developers in a >300GB repo with >2 million commits in their Windows Git repository.

The second: sparse-checkout for Git v2.25.0 allows you to checkout just a subset of your monorepo. This should speed up commands like git pull and git status. See this blog post for more info. Unfortunately, you have to manually specify which subdirectories you want to check out with Git sparse-checkout, whereas Piper handles this transparently for developers.