Facebook伊甸园单库

2020-05-09 21:19:13

它的目标是为用户提供用户友好且功能强大的界面,以及极高的可伸缩性,以处理包含数百万个文件和数百万个提交的存储库。

EdenSCM的可伸缩性目标是确保所有源代码管理操作都随着开发人员使用的文件数量而不是存储库本身的大小进行扩展。这样,即使在拥有许多长文件和非常长的注释的大型存储库中,也能实现快速、高效的开发人员体验。

伊甸园CLI最初是基于Mercurial的,并且共享Mercurial的UI和特性的许多方面。

Eden CLI目前在Linux、Mac和Windows上构建和运行。py脚本是构建CLI的主界面。

尽管EdenSCM最初是从Mercurial演变而来的,但它并不是一个分布式的源代码控制系统。为了支持海量存储库,签出存储库时并不会将所有存储库数据都下载到客户端系统。理想情况下,客户端只下载最少量的数据必需品,然后在需要时从服务器获取额外的数据。

Mononoke目前只能在Linux上构建和运行,还不能在Facebook内部环境之外构建。用铁锈公司的货物建造系统支持Mononoke的工作仍在进行中。

EdenFS只在访问时按需填充工作目录文件,从而加快了大型存储库中的操作速度。这使得像签出这样的操作变得更快,但在第一次访问新文件时会对性能造成很小的影响。这在大型存储库中非常有用,在大型存储库中,开发人员一次通常只使用存储库的一小部分。

EdenFS与使用稀疏结账具有类似的性能优势,但用户体验要好得多。与稀疏签出不同,EdenFS不需要手动管理要签出的文件列表,并且用户可以透明地访问任何文件,而无需更新配置文件。

EdenFS还可以跟踪哪些文件已被修改,从而实现无需扫描工作目录的非常高效的状态查询。文件系统监视工具Watchman还与EdenFS集成,使其能够更高效地跟踪文件系统的更新。

构建EdenFS的推荐方式是在存储库的顶层使用build.sh脚本。在构建EdenFS本身之前,此脚本将下载并构建EdenFS的所有必需依赖项。在Windows上,使用build.bat脚本而不是build.sh。

此构建脚本将在存储库之外创建一个输出目录,它将在其中执行构建。您可以通过向构建脚本传递--sccratch-path参数来控制此输出目录位置。

EdenSCM是Facebook使用的主要源代码控制系统,用于Facebook的主要monorepo代码库。

对在Facebook之外使用EdenSCM的支持仍处于高度试验性阶段。虽然如果您遇到问题,我们很有兴趣听到反馈,但支持外部用户目前并不是开发团队的优先事项,因此很遗憾,我们目前不能保证立即提供支持。