我正在将一组项目从Subversion迁移到Mercurial。这些项目目前使用svn:externals将代码从一个引入其他项目。我一直在遵循建议,将外部指向特定的修订版号,并根据需要手动更新(这样当我更新到主项目的过去版本时,我也会得到过去版本的外部版本。)
在Mercurial中进行外部操作的方法似乎是使用subrepos,但我没有看到将它们固定到特定修订版的方法 - 看起来每当我更新主要版本时,Hg将始终将子版本更新为最新版本回购。那是对的吗?有没有办法解决它?
答案 0 :(得分:3)
在.hgsub
文件中,您可以使用http://[user[:pass]@]host[:port]/[path][#revision]
(或local/filesystem/path[#revision]
)语法(有关更多示例,请参阅hg help urls
)将subrepo锚定到特定修订版。对于该修订字符串,您甚至可以使用#branchname
或#tagname
,以便跟踪特定分支(ex stable
)或可移动代码(例如release
)的提示这样,只有在更新远程子报道上的分支或标记时才能获得新版本。
答案 1 :(得分:1)
(从我上面的评论复制)
原来我错了。它不会更新到最新版本,它会更新到.hgsubstate文件中指定的版本,该版本受版本控制并在每次提交时自动更新。因此,这实际上比SVN外部更容易,因为修订不必手动重新绑定;主仓库的每个修订版本都自动与子仓位的相应修订版相关联。
答案 2 :(得分:0)
似乎Mercurial子版本总是更新到远程存储库的最新提示。
我建议,如果您使用远程存储库的特定版本并且不经常更新该版本,最好将该版本折叠到主存储库中。这意味着您不再依赖外部来源进行结账。