在这个2015 年的F8 会议视频(从 8:40 开始)中,他们谈到了使用 Mercurial 和跨 facebook 的单一存储库的优势。
这在实践中如何运作?使用 Mercurial,我可以签出子目录(位于 SVN 中)吗?如果是这样,怎么做?我需要为此使用facebook-mercurial-extension
在这个2015 年的F8 会议视频(从 8:40 开始)中,他们谈到了使用 Mercurial 和跨 facebook 的单一存储库的优势。
这在实践中如何运作?使用 Mercurial,我可以签出子目录(位于 SVN 中)吗?如果是这样,怎么做?我需要为此使用facebook-mercurial-extension
从您的问题来看,不清楚您是在寻找工作流程(monorepo 与多个 repos 的争论)还是寻找巨大代码库的性能和扩展。
对于工作流程,我建议在谷歌上搜索monorepo
. 它有其优点和缺点,您需要了解您的情况和当前的工作流程来决定。对于性能和扩展,请继续阅读。
的想法remotefilelog
不是签出子目录(正如您所提到的),而是签出所有内容。为了有效地做到这一点,您需要 Facebook 积极开发的两个扩展:
hg clone
时间hg pull
。hgwatchman
,现在是 mercurial 核心的一部分)。这大大减少了本地操作的时间,例如hg status
. 请注意,fsmonitor
它独立于remotefilelog
. 您可以开始对此进行试验,因为它不需要在服务器端进行任何设置。使用最近的 mercurial(我强烈建议),您可以使用CommandServer + CHg减少 Python 解释器的额外启动时间。
一些附加说明:
fsmonitor
。它工作得很好,在大型 repos 上,时间hg status
从 10 秒减少到不到 1 秒(这 1 秒的大部分时间是 Python 启动时间,见上文CHg
)。如果您的存储库真的很大,您可能需要微调一些 inotify 内核参数(或 MacOSX 上的等效参数)。该fsmonitor
文档包含您需要的所有信息。remotefilelog
,尽管我阅读了我发现的所有内容并且我确信它有效。根据开发的完成方式(每个人是否始终连接互联网,组织是否有自己的主存储库),可能会有一个警告:它将去中心化部分转换hg
为集中式 VCS,例如svn
:一些通常可以离线完成的操作(例如:过去hg log
第hg update
一个变更集)现在需要连接到主存储库。remotefilelog
广泛使用了扩展。对于只想使用它来完成任务而不花时间了解其工作原理的用户而言,largefiles
它具有相同的缺点remotefilelog
和一些令人困惑的极端情况。hg
如果我要管理另一个大型 repo,我会使用remotefilelog
than largefiles
,尽管它们的用例并不完全相同。subrepositories
( doc1 , doc2 )。问题是它会根据您在源代码树中的位置改变 hg 的行为。同样,如果开发人员不关心真正了解 hg 的工作原理,那将太令人困惑了。附加信息:
mercurial facebook
。我不确定答案是否仍然适用于 FB 投入的所有努力
(2017 年初)链接问题中的答案仍然适用(因为它们偶尔会更新),但请注意,您必须阅读所有评论和答案。
remotefilelog 本质上允许按需进行浅层克隆(因此您不会一直获取所有内容的历史记录),但您仍然可以获取所需版本的所有 repo 目录的基本元数据并进行结帐。
使用 Mercurial,我可以签出子目录(SVN 中的 li[k]e)吗?如果是这样,怎么做?
https://stackoverflow.com/a/40355673/7836056讨论了如何使用第三方扩展来允许窄/稀疏结帐(Facebook 的sparse.py
)或窄克隆(谷歌的 NarrowHG)与 Mercurial,因此只能从内部“创建”单个目录主存储库(尽管有完全不同的权衡)。
(注意措辞很重要:“稀疏签出”是指在引用分布式版本控制时非常具体的操作,而在使用它来引用集中式版本控制时不存在)