Jam*_*kin 61 mercurial clone dvcs
我有一个包含少数相关项目的Mercurial存储库.我想分支其中一个项目,以便在其他地方开展工作.
克隆只是存储库的一部分,并且这是实现这一目标的正确方法吗?
Mar*_*ler 53
你想要的是一个狭窄或部分克隆,但遗憾的是还不支持.
如果您已经拥有一个大型存储库并且您意识到将它拆分为几个较小的存储库是有意义的,那么您可以使用convert扩展来执行Mercurial到Mercurial转换.请注意,这会创建一个新的存储库foo
,您无法在your-big-repo
和之间推/拉foo
.
在convert extension
默认情况下不启用,因此以下内容添加到您的回购的hgrc
文件或您的mercurial.ini
文件:
[extensions]
hgext.convert=
Run Code Online (Sandbox Code Playgroud)
然后用.创建一个map.txt
文件
include "libs/foo"
rename "libs/foo" .
Run Code Online (Sandbox Code Playgroud)
(注意你甚至可以在Windows上使用正斜杠)并运行
$ hg convert --filemap map.txt your-big-repo foo
Run Code Online (Sandbox Code Playgroud)
这将使foo
存储库具有该libs/foo
文件夹的完整历史记录your-big-repo
.
如果要删除所有foo
来自的证据,your-big-repo
可以在用于删除exclude libs/foo
目录的位置进行另一次转换.
如果你有几个这样的存储库并且想要将它们作为一个整体使用,那么你应该查看子存储库.此功能允许您在结帐时包含其他存储库 - 类似于svn:externals
工作方式.请按照该Wiki页面上的建议操作.
Nat*_*Lee 12
您可以使用转换扩展将子仓库拆分为多个仓库,而不是进行部分克隆.
具体来说,请参阅" 从Mercurial转换 "一节:
过滤Mercurial存储库以获取现有存储库的子集也很有用.例如,要将存储库foo的子目录subfoo转换为具有自己生命的存储库(同时保留其完整历史记录),请执行以下操作:
Run Code Online (Sandbox Code Playgroud)$ echo include subfoo > /tmp/myfilemap $ echo rename subfoo . >> /tmp/myfilemap $ hg convert --filemap /tmp/myfilemap /path/to/repo/foo /tmp/mysubfoo-repo
我偶然发现了这个问题并发现了一种方法:使用符号链接(不幸的是Linux)
例如,如果您只需要/project
在存储库中,则在计算机上克隆另一个文件夹中的存储库,然后使用ln -s /repo/location/ project
.Mercurial将处理它
(2016 年末)Mainline Mercurial 仍然没有打包对“窄克隆”的支持,但有第三方扩展以不同的方式解决这个问题。
如果您只能处理狭窄的结帐(又名“稀疏结帐”或“按文件路径部分结帐”),那么sparse.py
来自hg-experimental 存储库(查看hgext3rd/
目录内部)的 Facebook扩展可能是可行的。在这种情况下,您仍然克隆完整的历史记录(因此 .hg 目录不会更小),但您的工作目录仅显示/作用于完整存储库的一个子集。
或者,谷歌创建了一个NarrowHG 扩展,它可以进行窄克隆(又名“按文件路径部分克隆”)。您将需要控制服务器、客户端并愿意使用实验性功能,但它确实将 .hg 中克隆的复制历史限制为原始存储库中的一个子集。
(2019)sparse
扩展被合并到 Mercurial 4.3作为实验sparse
扩展。该NarrowHG扩展并入水银4.6的hgext.narrow
扩展。
归档时间: |
|
查看次数: |
20018 次 |
最近记录: |