Mercurial: переход к новой структуре репозитория — обновление вложенных репозиториев

#version-control #mercurial #mercurial-subrepos

#контроль версий #непостоянный #mercurial-вложенные репозитории

Вопрос:

Итак, вот в чем проблема:

Допустим, у нас есть очень старая установка 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 для этих проектов [и всех их ветвей]. Это привело бы к тому, что все предыдущие их версии находились бы в состоянии «зависания» — невозможно клонировать их напрямую, наверняка возникли бы некоторые проблемы при их обновлении и т. Д.

Есть ли общий способ справиться с такими ситуациями, который также исправляет ВСЕ предыдущие изменения?

Комментарии:

1. Я не использовал вложенные репозитории широко, но ознакомьтесь с подпутями , чтобы найти способ их переназначения.

2. @MarkTolonen Это решение кажется мне потрясающим 🙂 Если бы вы написали ответ здесь, я бы принял его наверняка 🙂

Ответ №1:

В .hgrc файле есть опция вложенных путей, которая может сработать для вас:

вложенные пути

URL-адреса источников вложенных репозиториев могут устаревать, если удаленный сервер меняет имя или становится временно недоступным. В этом разделе вы можете определить правила перезаписи формы:

= где шаблон — это регулярное выражение, соответствующее URL-адресу источника вложенного хранилища, а замена — это строка замены, используемая для ее перезаписи. Группы могут быть сопоставлены по шаблону и ссылаться на них в заменах. Например:

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

переписывает http://server/foo-hg/ в http://hg.server/foo/ .

Относительные пути вложенных репозиториев сначала становятся абсолютными, а затем правила перезаписи применяются к полному (абсолютному) пути. Если шаблон не соответствует полному пути, предпринимается попытка применить его только к относительному пути. Правила применяются в порядке определения.