【发布时间】:2010-10-29 13:16:58
【问题描述】:
我有一个 Mercurial 存储库,其中包含一些相关项目。我只想将其中一个项目分支到其他地方。
克隆是否可能只是存储库的一部分,这是实现这一目标的正确方法吗?
【问题讨论】:
-
据我所知,这是不将多个项目放在一个仓库中的原因之一。
我有一个 Mercurial 存储库,其中包含一些相关项目。我只想将其中一个项目分支到其他地方。
克隆是否可能只是存储库的一部分,这是实现这一目标的正确方法吗?
【问题讨论】:
不可能,hg clone 将克隆整个存储库。
您可以查看子存储库扩展,它允许您在存储库中拥有存储库,这可能符合您的需求。
【讨论】:
你想要的是narrow or partial clone,但很遗憾,这还不支持。
如果您已经有一个大型存储库,并且您意识到将其拆分为几个较小的存储库是有意义的,那么您可以使用convert extension 进行 Mercurial 到 Mercurial 的转换。请注意,这会创建一个 new 存储库 foo,并且您不能在 your-big-repo 和 foo 之间推/拉。
convert extension 默认情况下未启用,因此请将以下内容添加到您的 repo 的 hgrc 文件或 mercurial.ini 文件中:
[extensions]
hgext.convert=
然后用
创建一个map.txt文件
include "libs/foo"
rename "libs/foo" .
(请注意,即使在 Windows 上也可以使用正斜杠)并运行
$ hg convert --filemap map.txt your-big-repo foo
这将使foo 成为一个存储库,其中包含来自your-big-repo 的libs/foo 文件夹的完整历史记录。
如果您想从your-big-repo 中删除foo 的所有证据,您可以进行另一次转换,使用exclude libs/foo 删除目录。
如果您有多个这样的存储库并且想要将它们作为一个整体使用,那么您应该查看subrepositories。此功能允许您在结帐中包含其他存储库 - 类似于 svn:externals 的工作方式。请关注该维基页面上的recommendations。
【讨论】:
您可以使用Convert Extension 将您的存储库按子存储库拆分为多个存储库,而不是进行部分克隆。
过滤 Mercurial 存储库以获取现有存储库的子集也很有用。例如,要将存储库 foo 的子目录 subfoo 转换为具有自己生命周期的存储库(同时保留其完整历史记录),请执行以下操作:
$ echo include subfoo > /tmp/myfilemap $ echo rename subfoo . >> /tmp/myfilemap $ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
【讨论】:
Convert extension 直截了当。
【讨论】:
hg export)将更改复制回原始存储库。
-f 标志。以this script 为例。 (注意:需要 convert 和 graphlog 扩展。)
我偶然发现了这个问题并找到了一种解决方法:使用符号链接(不幸的是仅适用于 Linux)
例如,如果您只需要存储库中的/project,请在您的计算机上将存储库克隆到另一个文件夹中,然后使用ln -s /repo/location/ project。 Mercurial 会处理它
【讨论】:
(2016 年末)Mainline Mercurial 仍然不打包对“窄克隆”的支持,但有第三方扩展以不同的方式解决该问题。
如果您只能处理狭窄的结帐(又名“稀疏结帐”或“按文件路径部分结帐”),那么 Facebook 的 sparse.py 扩展名来自 hg-experimental repository(查看 @ 内部987654327@ 目录)可能是可行的。在这种情况下,您仍然克隆完整的历史记录(因此 .hg 目录不会更小),但您的工作目录仅显示/作用于完整存储库的子集。
另外,Google 创建了一个NarrowHG extension,它可以缩小克隆(又名“通过文件路径进行部分克隆”)。您需要控制服务器、客户端并愿意使用实验性功能,但它确实将克隆在 .hg 中的复制历史限制为原始存储库中的子集。
(2019)sparse extension was merged into Mercurial 4.3 作为实验性sparse extension。 NarrowHG extension was merged into Mercurial 4.6 作为 hgext.narrow 扩展名。
【讨论】: