#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/
.Относительные пути вложенных репозиториев сначала становятся абсолютными, а затем правила перезаписи применяются к полному (абсолютному) пути. Если шаблон не соответствует полному пути, предпринимается попытка применить его только к относительному пути. Правила применяются в порядке определения.