2016-09-04 86 views
1

在这个从2015年开始的F8 conference video(从8:40开始)中,他们谈到了在Facebook上使用Mercurial和单个存储库的优点。Mercurial sparse checkout

这是如何工作的?使用Mercurial,我可以检出一个子目录(住在SVN中)吗?如果是这样,怎么样?我需要一个facebook-mercurial-extension这个

P.S:我只对SO发现像2010 thisthis答案哪里我不知道,如果答案仍与所有的努力申请FB把它付诸表决。

+0

这上带来了曙光它是如何工作的:https://www.mercurial-scm.org/pipermail/mercurial-devel/2014-June/059425.html –

回答

4

从你的问题来看,如果你正在寻找一个工作流程(monorepo vs multiple repos辩论),或者为了代码库的性能和缩放而不清楚。

对于工作流程,我建议使用google搜索monorepo。它有其优点和缺点,你需要了解你的情况和目前的工作流程来决定。为了表现和缩放,请继续阅读。

remotefilelog的想法是不签出一个子目录(如你所说),这个想法是检查一切。为了有效地做到这一点,你需要Facebook积极开发的两个扩展:

  • remotefilelog。这给你一些概念上类似于浅层克隆的东西。这减少了hg clonehg pull时间。
  • fsmonitor(之前称为hgwatchman,它现在是mercurial core的一部分)。这大大缩短了本地操作的时间,如hg status。请注意,fsmonitor独立于remotefilelog。您可以开始试验这个,因为它不需要在服务器端进行任何设置。

随着近来善变(我强烈建议),你可以剃掉使用CommandServer + CHg Python解释器的额外的启动时间。

一些其他注意事项:

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

其他信息:

0

我不知道,如果答案仍然与所有FB把 进去

(早期2017年)的努力,链接仍然是问题的答案适用(因为他们偶尔得到更新申请)但请注意,您必须阅读所有评论和答案。

remotefilelog基本上可以让按需浅克隆(这样你就不会获取历史一切所有的时间),但你仍然在期望获取了必要的元数据,以及跨结账,回购的所有目录修订。

使用Mercurial,我可以检出一个子目录(SVN中的li [k] e)吗?如果是这样,怎么样?

https://stackoverflow.com/a/40355673/7836056讨论如何使用第三方扩展,允许窄/稀疏检出(Facebook的sparse.py)或窄克隆(谷歌的NarrowHG)与水银因此只能从主存储库中“创造”一个目录(尽管根本不同的折衷)。

(注意措辞事项:参照的方式分布式版本控制使用它来指中心版本控制时不存在时,“疏结账”是指一个非常具体的行动)