Mercurial:迁移到新的存储库结构 - 子存储库更新

Posted

技术标签:

【中文标题】Mercurial:迁移到新的存储库结构 - 子存储库更新【英文标题】:Mercurial: moving to a new repository structure - subrepos update 【发布时间】:2021-04-21 04:57:39 【问题描述】:

那么,问题来了:

假设我们有一个非常旧的 Kallithea 安装,带有一大堆存储库,经过 5 年的密集开发,它变得臃肿,充满了遗留和实验性的东西,结构不一致等。我们决定将所有东西更新到现代版本,删除所有遗留和未使用的东西,并在服务器上构建一个新的存储库目录结构。

基本上,问题是:

DIRECTORY1 [ PROJ1 SUBPROJ1 ] //SUBPROJ1 is a subrepo for PROJ1, .hgsub approves. DIRECTORY2 [ PROJ2 ] // SUBPROJ1 is a subrepo for PROJ2 as well!

正在重做

COMMON [ SUBPROJ1 ] DIRECTORY1 [ PROJ1 ] DIRECTORY2 [ PROJ2 ]

因此,要对支持新目录结构的项目 PROJ1 和 PROJ2 进行更新,我们需要为这些项目 [及其所有分支] 更新 .hgsub。这将使它们的所有先前版本都处于“挂起”状态 - 无法直接克隆它们,更新它们肯定会有一些问题,等等。

是否有一种通用的方法来处理这种情况并修复所有以前的修订?

【问题讨论】:

我没有广泛使用 subrepos,但请查看 subpaths 以了解重新映射它们的方法。 @MarkTolonen 这个解决方案对我来说似乎很棒 :) 如果你在这里写一个答案,我肯定会接受 :) 【参考方案1】:

.hgrc 文件有一个适合您的subpaths 选项:

子路径

如果远程服务器更改名称,子存储库源 URL 可能会过时 或暂时不可用。本节让您定义 改写形式的规则:

= 其中模式是正则表达式 匹配子存储库源 URL 和替换是替换 用于重写它的字符串。组可以在模式和匹配 替换中引用。例如:

http://server/(.*)-hg/ = http://hg.server/\1/

http://server/foo-hg/ 重写为http://hg.server/foo/

首先将相对子存储库路径设为绝对路径,然后重写 然后将规则应用于完整(绝对)路径。如果模式没有 匹配完整路径,尝试将其应用于相对路径 单独的路径。规则按定义顺序应用。

【讨论】:

以上是关于Mercurial:迁移到新的存储库结构 - 子存储库更新的主要内容,如果未能解决你的问题,请参考以下文章

将 Subversion 存储库的一部分迁移到新服务器并重新路径

如何将旧提交从旧存储库移动到新存储库

创建新的 mercurial 存储库克隆 SINCE 修订版

在 Mercurial 存储库中查找大文件

清理 Mercurial 存储库

无法通过 http 克隆 mercurial (hg) 存储库