Обновление старых версий Mercurial с перемещенными подпунктами - PullRequest
7 голосов
/ 20 февраля 2012

В нашем проекте есть несколько удаленных вложенных репозиториев, и их адреса недавно изменились с http://host/path на http://other_host/path. Как можно вернуться к ревизии, скажем, в прошлом месяце, когда Mercurial считает, что субрепо может быть найдено в http://host/path?

$ hg -v up -d 1/20/2012
Found revision 1091 from Fri Jan 20 10:22:29 2012 -0600
resolving manifests
abort: error: No connection could be made because the target machine actively refused it


$ hg --debug up -d 1/20/2012
Found revision 1091 from Fri Jan 20 10:22:29 2012 -0600
resolving manifests

<snip...>

subrepo merge 0f0f2b807811+ 0908d5249a6f 0f0f2b807811
  subrepo external/our_remote_repo: both sides changed, merge with https://old_host/external/our_remote_repo:c66cf52ce1f240193190cec392d889618c09f22b:hg
using https://old_host/external/our_remote_repo
sending capabilities command
using auth.old_host.* for authentication
abort: error: No connection could be made because the target machine actively refused it

Ответы [ 2 ]

7 голосов
/ 21 февраля 2012

Согласно документации вы можете использовать [subpaths] в hgrc для переназначения таких URL-адресов .

Это сводится к определению правил перезаписи исходных расположений в под-репозиториях в виде

<pattern> = <replacement>

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

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

переписывает

http://server/foo-hg/ into http://hg.server/foo/.
0 голосов
/ 20 февраля 2012

Вы не можете сделать это. Mercurial возвращается в том состоянии, в котором он находился именно на этой ревизии (URL-адрес субрепозиции, ревизия в суб-репо)

...