是否有与 Google 的版本控制工具 piper 等效的开源软件?

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

Google 将其所有代码库存储在一个名为 piper [1][2][3].

的存储库中

它采用的方法与开源替代方案(集中式 'cloud' 服务)截然不同,旨在扩展到包含数十亿个文件、数千名开发人员和数百万次提交的存储库 [1]。

它似乎没有 Google 开源它也不打算这样做(与他们的构建系统 blaze 和其他一些工具 [4] 相反)。

您是否知道任何采用类似于 piper 方法的开源版本控制系统?

[1] https://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/fulltext

[2] https://www.wired.com/2015/09/google-2-billion-lines-codeand-one-place/

[3] https://www.youtube.com/watch?v=W71BTkUbdqE

[4]https://opensource.google.com/projects/list/developer-tools?page=3

简短的回答是否定的,它似乎不存在。

正如您在 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" 中看到的那样。

因此,首先,您需要明确 "features" 您感兴趣的是什么,因为您可能对不属于 Piper 职责的功能感兴趣。

此外,请记住您的服务器磁盘 space 和 OS 会在所选 VCS 之前限制文件 count/size。

如果您需要集中式 VCS 和数十亿个文件,您可以使用 SVN 或 OpenCVS。

如果您需要一个拥有数千名开发人员和数百万次提交的分布式版本,请查看 Git、Bazaar、Bitbucket 或 Mercurial。

但是你真的满足所有这些要求吗?

据我所知,市场上没有 Piper 的开源等效项。

为了更好地理解集中式和分布式 VCS,请查看 this Comparison between Centralized and Distributed Version Control Systems

另外,看看what is Google's repository like?

Google 构建了不止一种版本控制工具。 Piper 专门用于满足 google monorepo 的需求。

当google构建android时,它构建了gerrit和repo来处理版本控制。 Repo 用于同时处理许多 git 个存储库,每个存储库都可能有自己的维护者和发布周期。如果没有单个组织的控制来执行诸如全局构建状态或全局重构之类的事情,则开源依赖项不适合 monorepo。此外,piper 的要求在大多数地方根本不适用,例如提交的性能跟上请求。

没有与 piper 等效的开源软件。

请注意,piper 已经很老了,并且有一个可以追溯到 perforce era 的老式 API。我想您会想要一个更现代的工作流程,类似于现代 DVCS 提供的。

我很确定您的代码库没有 Google 的 86TB 存储库那么大。你真的需要同样的东西吗?

我很确定您可以使用基于 git or mercurial 的 monorepo。并且可能演变成虚拟文件系统,例如 VFS for git 如果你需要的话。

最近的两项开发为 Git 带来了类似 Piper 的功能:Git 和 sparse-checkout 的 VFS。

第一个:Microsoft 最近开源了 VFS for Git,感觉它把 Piper 的一些 monorepo 功能带到了 Git。

Git 的 VFS 虚拟化了 Git 存储库下的文件系统,以便 Git 工具看到看似正常的存储库,而实际上文件并不存在在磁盘上。 Git 的 VFS 仅在需要时下载文件。

Git 的 VFS 还管理 Git 的内部状态,因此它只考虑您访问过的文件,而不必检查存储库中的每个文件。这确保了状态和结帐等操作尽可能快。

Microsoft 在超过 300GB 的存储库中为超过 4000 名开发人员使用,在他们的 Windows Git 存储库中有超过 200 万次提交。

第二个:sparse-checkout for Git v2.25.0 允许您只签出 monorepo 的一个子集。这应该会加快 git pullgit status 等命令的速度。有关详细信息,请参阅 this blog post。不幸的是,您必须手动指定要使用 Git sparse-checkout 检查哪些子目录,而 Piper 会为开发人员透明地处理这个问题。