2010-08-08 68 views
18

有没有办法克隆subrepos附带的回购,但没有Mercurial拉动所有subrepos?Mercurial`hg clone`但忽略所有subrepos?

看起来虽然hg clone -U可以用来获得回购的空克隆,但没有什么能够说服hg update避免通过拉动所有的subrepos开始。

我应该指出,创建这样一个克隆后,保留轻松同步到头版本的能力至关重要。

回答

5

这个答案可能会增加比所需更多的问题,但提供与水银的工作,当你无法更新做不好subrepository路径或一些有价值的笔记修订。

第1步:克隆库中没有任何更新

hg clone --noupdate source_repository destination_repository 

第2步:使用还原得到正确的文件

hg revert --all --rev revision_number --exclude subrepo_1 --exclude subrepo_2 ... 

在这一点上,你有一个新的变更;您可能需要确保父版本是正确的。当我这样做时,我的新变更集的父变更集为0.要解决此问题,我必须设置父变更集AND开关分支(因为我的变更集位于不同的分支上)。

第3步:改变当前的父母改变

hg debugsetparents revision_number 
hg branch branch_name 

应该这样做。

+2

第3步之后,“hg status”仍将所有文件显示为待处理添加。运行'hg debugrebuildstate -r tip'修复了这个问题。 – 2016-03-26 21:42:36

3

如果你有一个subrepo,工作目录必须包括该subrepo的一些版本。如果指定,该版本可能是固定的旧版本,如果没有,则可能是提示。

如果没有获取subrepos,则无法更新您的回购;如果你有一个完整的工作目录没有他们,你不应该使用subrepos - 而是使用真正的外部回购。

如果您的subrepos与某个远程版本挂钩,则第一个更新后的更新不会触发subrepo更新 - 它们已经是最新的。但是对于工作目录的初始创建,您将不得不进行远程拉取。

您可以通过扫描hgsubstate文件来欺骗Mercurial。但是,真的,你的模型和概念模型是不同的,所以如果这是一个问题,你可能不适合subrepos。

编辑:如果您发现自己克隆然后多次更新到提示,请尝试使用本地分支或mq。这样你只需要做一次初始化克隆。

+0

大多数时候他们看起来都很好。只是subrepos很大,与我发现的官方“服务器”相比较的最佳方式是保持清洁的本地结帐。 subrepos为这种方法增加了大量的开销。 – 2010-08-09 00:09:17

+0

@romkyns:如果你只是想跟踪你已经改变了什么,使用'hg out'(或'hg diff'来进行未提交的更改)。或者你可以创建一个“干净的”克隆,并偶尔使用'hg pull -u'来保持它最新... – Borealid 2010-08-09 00:30:48

+0

谢谢,我想我只能容忍一堆额外的副本这些巨大的subrepos。我发现'hg diff'对于审查代码并不理想,而是使用基于外部GUI的diff。 – 2010-08-09 01:17:43

4

找到了一个哈克的方式。它仍然要求所有subrepos被检出一次,但之后可以删除。

  1. 克隆整个地段,包括subrepos。没有办法绕过这个。
  2. 删除subrepos
  3. hg remove .hgsub

我试过subrepos克隆之前说服水银来hg remove .hgsub,但我得到了最好的是not removing .hgsub: file is untracked

+6

这是一个耻辱。 – 2010-12-08 10:31:22

+6

如果由于某种原因无法访问外部subrepo,则此解决方案实际上无效。关于忽略subrepos的一些讨论[here](http://mercurial.selenic.com/bts/issue2520)。 – 2011-11-19 16:25:45

13

这应该做你想要什么:

REM Take a new clone, but do not update working directory 
hg clone --noupdate %REPO_PATH% %DESTINATION% 

REM Update working directory but exclude the certain subprojects 
hg revert --all --rev %BRANCH% --exclude %SUBREPO_PATH_1% --exclude %SUBREPO_PATH_2%