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