Mercurial稀疏结账

Ren*_*rop 2 mercurial sparse-checkout mercurial-extension

在2015年的F8会议视频(从8:40开始)中,他们谈到了使用Mercurial和Facebook上的单个存储库的优势.

这在实践中如何运作?使用Mercurial,我可以签出一个子目录(住在SVN)吗?如果是这样,怎么样?我需要一个Facebook的善变扩展

PS:我在2010年才找到这样或者这样的答案,我不知道答案是否仍然适用于FB投入的所有努力.

mar*_*o.m 5

从您的问题来看,目前尚不清楚您是在寻找工作流程(monorepo与多重回购辩论),还是在寻找庞大代码库的性能和扩展能力.

对于工作流程,我建议使用Google搜索monorepo.它有其优点和缺点,您需要了解您的情况和当前的工作流程来决定.对于性能和扩展,请继续阅读.

想法remotefilelog是不检查一个子目录(正如你所提到的),想法是结帐一切.为了以有效的方式做到这一点,您需要Facebook积极开发的两个扩展:

  • remotefilelog.这为您提供了与浅层克隆相似的概念.这减少hg clonehg pull时间.
  • fsmonitor(之前称为hgwatchman,它现在是mercurial核心的一部分).这大大减少了本地操作的时间,例如hg status.请注意,fsmonitor它独立于remotefilelog.您可以开始尝试这一点,因为它不需要在服务器端进行任何设置.

使用最近的mercurial(我强烈建议),您可以使用CommandServer + CHg减少 Python解释器的额外启动时间.

一些额外的说明:

  • 我进行了广泛的测试fsmonitor.它工作得很好,在巨大的回购时间hg status从10秒减少到不到1秒(这个1秒的大部分是Python启动时间,见上文CHg).如果您的存储库非常庞大,您可能需要微调一些inotify内核参数(或MacOSX上的等效参数).该fsmonitor文档中有你需要的所有信息.
  • 我没有测试remotefilelog,虽然我读了我发现的一切,但我确信它有效.根据开发的完成方式(每个人总是有互联网连接,组织是否有自己的主回购)可能有一个警告:它将分散的部分转换hg为集中式VCS,如svn:通常可以离线完成的一些操作(例如:hg loghg update过去的第一个变更集)现在需要连接到主存储库.
  • 在考虑之前remotefilelog,我广泛使用了largefiles一个巨大的回购扩展.remotefilelog对于那些想要在hg不花时间了解其工作原理的情况下完成任务的用户来说,它具有相同的缺点和一些令人困惑的角落案例.如果我要管理另一个巨大的回购,我会使用,remotefilelog而不是largefiles,虽然他们的用例不是真的相同.
  • Mercurial也支持subrepositories(doc1,doc2).问题是它会根据您在源树中的位置更改hg的行为.同样,如果开发人员不关心真正理解hg如何工作,那将会太令人困惑.

附加信息: