Version control 有没有一个开源软件可以与piper、Google';s版本控制工具?

Version control 有没有一个开源软件可以与piper、Google';s版本控制工具?,version-control,dvcs,Version Control,Dvcs,谷歌将其所有代码库存储在一个名为piper[1][2][3]的存储库中 它的方法与开源替代方案(集中式“云”服务)非常不同,旨在扩展到一个拥有数十亿文件、数千名开发人员和数百万次提交的存储库[1] 谷歌似乎既没有开源It,也没有计划这样做(与他们的构建系统blaze和其他一些工具相反[4]) 您是否知道有任何类似于piper的开源版本控制系统 [1] [2] [3] [4] 简单的答案是不,它似乎不存在 正如您在一篇文章中所读到的,“很难说版本控制系统在哪里结束,开发工具链的其他部分从哪里开始”

谷歌将其所有代码库存储在一个名为piper[1][2][3]的存储库中

它的方法与开源替代方案(集中式“云”服务)非常不同,旨在扩展到一个拥有数十亿文件、数千名开发人员和数百万次提交的存储库[1]

谷歌似乎既没有开源It,也没有计划这样做(与他们的构建系统blaze和其他一些工具相反[4])

您是否知道有任何类似于piper的开源版本控制系统

[1]

[2]

[3]


[4] 简单的答案是不,它似乎不存在

正如您在一篇文章中所读到的,“很难说版本控制系统在哪里结束,开发工具链的其他部分从哪里开始”

因此,首先,您需要明确您感兴趣的“功能”,因为您可能对一个不属于Piper责任的功能感兴趣


此外,请记住,在选择VCS之前,服务器磁盘空间和操作系统会限制文件数量/大小

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

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

但你真的有这些要求吗

好了,市场上还没有Piper的开源产品

为了更好地理解集中式和分布式VCS,请参阅


另外,看看谷歌已经建立了不止一个版本控制工具。Piper专门满足google monorepo的需求

当谷歌构建安卓系统时,它构建了gerrit和repo来处理版本控制。Repo用于同时处理许多git存储库,每个存储库都有自己的维护者和发布周期。如果没有一个组织实施诸如全局构建状态或全局重构之类的控制,开源依赖项就不适合monorepo。此外,piper的要求在大多数情况下并不适用,例如提交的性能与请求保持一致


    • 没有开源软件可以与piper媲美

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

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

      我很确定你可以使用基于或的monorepo。可能会演变成一个虚拟文件系统,如
      如果您需要的话。

      最近的两项开发为Git带来了类似Piper的特性:VFS for Git和
      稀疏签出

      第一个:微软最近开源,感觉它把Piper的monorepo功能带到了Git上

      VFSForGit将Git存储库下的文件系统虚拟化,以便Git工具在文件实际上不存在于磁盘上时,可以看到看似正常的存储库。VFSForGit只下载需要的文件

      VFSForGit还管理Git的内部状态,以便它只考虑您访问的文件,而不必检查存储库中的每个文件。这样可以确保状态和签出等操作尽可能快

      微软在一个>300GB的repo中为>4000名开发人员使用此功能,他们的Windows Git存储库中有>200万次提交


      第二个:
      Git v2.25.0的稀疏签出
      允许您只签出monorepo的一个子集。这将加快诸如
      git pull
      git status
      之类的命令的速度。有关更多信息,请参阅。不幸的是,您必须手动指定要使用Git
      稀疏签出签出的子目录,而Piper对开发人员来说是透明的。

      您需要存储20亿行代码吗?就免费的基于云的vcs而言,bitbucket非常慷慨。我自己也不这么认为,但我遇到过一些公司,这些公司与此相去甚远,目前使用数百个git/hg/cvs存储库,它们之间存在依赖关系。更新几乎所有存储库共享的“公共”组件的版本是一场噩梦。因此,这些版本很少见,而其他存储库包含的代码应该是通用的,并且是重复的,因为这比将其集成到现有的公共repo中更容易。还有其他的可查找性、集成测试等问题。。。基本上,谷歌给出的使用单一存储库的所有理由。在这种情况下,我可能会考虑类似SVNsvn的东西?世界跆拳道联盟?(你把“git”拼错了,对吧!?)声称“很多相互依赖的回购协议”是复杂的,而“他们保留代码的副本…”作为一种解决方案,这不是一种解决方案&导致了这个问题。我不确定在这个场景中使用了哪些语言(除了举例说明w/具体示例外,这并不重要),但解决方案是继续使用单独的repo,并将发布的、版本化的工件发布到二进制存储库(例如artifactory、nexus等),在其他repo中仅使用版本声明依赖关系。例如,查看所有基于java的开发人员(包括Scala和其他jvm语言)和C/C++(Linux开发人员)“请记住,在选择VCS之前,您的服务器磁盘空间和操作系统会限制文件数量/大小”->这是重点:piper不是这样的。它是一个集中式VCS,但却是一个分布式服务。“云服务”方法允许“无限的可伸缩性”。存储库内容被切分。“签出”只是服务器端的元数据+挂载“网络FS”。文件操作转换为RPC到维护“本地副本”状态的服务。好处:你的“本地副本”实际上是任何人都可以访问的