我可以克隆Mercurial存储库的一部分吗?

是否可以克隆Mercurial存储库的一部分? 比方说,该存储库非常大,或者包含多个项目或多个分支。 我可以只克隆部分存储库吗?

例如在Subversion中,你可能有trunkbranches 。 如果我只想获得主干(或其中一个分支),我只需要[project]/trunk 。 如果我克隆hg回购,我会得到树干和所有分支机构。 这可能是我不想要的很多信息。 我可以避免这样做吗?

或者,如果我想在一个hg仓库中有多个项目,我该如何做? 也就是说,我可能只是得到一个项目而忽视其他项目。


是的你可以。 我相信你已经开始了,但为了那些稍后会在这里漫步的人,我遵循了ConvertExtension中的文档,并编写了一个简单的批处理脚本:

@echo off
echo Converting %1
REM Create the file map
echo include %1 > ~myfilemap               
echo rename %1 . >> ~myfilemap 
REM Run the convert process
hg convert --filemap ~myfilemap . ..%1   
REM Delete the file map
del ~myfilemap                             
cd ..%1
REM update the new repo--to create the files
hg update                                  

将其命名为split.cmd ,并将其放入要分割的回购目录中。 比如说你有C:reposReallyBigProject ,子文件夹是C:reposReallyBigProjectsmall-project 。 在命令提示符处,运行:

cdreposReallyBigProject
split.cmd small-project

这将创建C:repossmall-project其中包含大型项目相关修订历史的一部分。

convert未默认启用。 您需要确保.hghgrc文件中存在以下行(在我的示例中为c:reposReallyBigProject.hghgrc ):

[extensions]
hgext.convert=

@缺口

“例如在Subversion中,你可能有树干和分支,如果我只想得到树干(或其中一个分支),我可以申请[project] / trunk。如果我克隆了hg repo,我会得到树干和所有这可能是很多我不想要的信息,我可以避免这样做吗?“

绝对。 只需使用hg clone -r <branch>并只获得你想要的分支。 如果你有很多分支,你需要为每个-r <branch>一个-r <branch><branch>不一定是一个命名分支:你可以简单地拥有多个未命名的头(或者使用书签命名的头),尽管这些头还不完美,因为目前他们没有显示推/拉/克隆) 。

请记住,在DVCSes中,其中的Mercurial分支往往是短命的,并且经常合并回彼此。 如果你拉一个分支,你仍然会得到它与任何其他分支的共同历史。


据我所知,这是不可能的。 但与Subversrion相比,克隆整个回购可能不会比SVN的分支慢。

从UnderstandingMercurial引用:

许多SVN / CVS用户希望将一个相关项目放在一个存储库中。 这实际上并不是什么汞制造的,所以你应该尝试一种不同的工作方式。 这尤其意味着,你不能只检出一个存储库的一个目录。

但是,如果您绝对需要在一个元存储库中托管多个项目,则可以尝试使用Mercurial 1.3或更早版本的ForestExtension引入的Subrepositories功能。

链接地址: http://www.djcxy.com/p/37535.html

上一篇: Can I clone part of a Mercurial repository?

下一篇: Compare and Contrast