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

问题描述

那么,问题来了:

假设我们有一个非常旧的 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 [及其所有分支]。这将使它们的所有先前修订版处于“挂起”状态 - 无法直接克隆它们,更新它们肯定会出现一些问题等。

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

解决方法

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

子路径

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

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

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...