facebook (banned in the Russian Federation)) published The initial text management system sapling used in the development of internal projects of the company. The system is aimed at providing a familiar version control interface, which can be scaled for very large repositories covering tens of millions of files, communities and branches. The client’s code is written in Python and open under the license gplv2.
Separately developed a server part for effective remote work with repositories and a virtual file system for working with a local cut of part of the repository as a full repository (the developer sees the entire repository, but only the demanded data to which the appeals are carried out are copied). The component code used in the Facebook infrastructure is not yet open, but the company promise to promise it in the future. Nevertheless, at present, in the Sapling repository you can already find prototypes of the server mononoke (in the language rust) and vfs edenfs (on C ++). These components are not mandatory and the Sapling client is enough to work, which supports cloning GIT-repositories, interaction with the Git LFS servers and work with GIT-hostings, such as github.
The main idea of the system is that when interacting with a special server part that ensures the storage of the repository, all operations are scaled depending on the number of files that are actually used in the code that the developer is working on and do not depend on the total size of the entire repository. For example, the developer can use only a small portion of code from a very large repository and only this small part will be transferred to its system, and not the entire repository. Filling out the working catalog is carried out dynamically, as it contacts the files from the repository, which on the one hand allows you to significantly speed up working with its part of the code, but on the other hand it leads to slowing down when first accessing new files and requires constant access to the network (separately provided and offline-regime preparation of commits).