#mercurial
#mercurial
Вопрос:
Мы пытаемся клонировать репозиторий Mercurial A, где он ссылается на репозиторий B, который переместил хосты. Мы хотели бы обновить .hgsub в A, чтобы указать на новое местоположение B, но это проблема с курицей и яйцом, если мы не можем hg клонировать A в первую очередь.
Кто-нибудь знает, как обойти это?
Ответ №1:
$ hg help subrepos
...
Remapping Subrepositories Sources
---------------------------------
A subrepository source location may change during a project life,
invalidating references stored in the parent repository history. To fix
this, rewriting rules can be defined in parent repository "hgrc" file or
in Mercurial configuration. See the "[subpaths]" section in hgrc(5) for
more details.
$ man hgrc
...
subpaths
Defines subrepositories source locations rewriting rules of the form:
<pattern> = <replacement>
Where pattern is a regular expression matching the source and replacement is the replacement string used to
rewrite it. Groups can be matched in pattern and referenced in replacements. For instance:
http://server/(.*)-hg/ = http://hg.server/1/
rewrites http://server/foo-hg/ into http://hg.server/foo/.
All patterns are applied in definition order.
...
Итак, вы можете сделать это .hgrc
в [subpaths]
разделе.
Комментарии:
1. Я тоже не знал, как это сделать, поэтому ответ точно показывает, как я его нашел.
hg help
иman
являются отличными утилитами.
Ответ №2:
Сначала обратите внимание, что clone — это init pull update и что клонирование подраздела является частью шага обновления, а не шага извлечения. Это означает, что вы можете избежать сбоя при клонировании, просто пропустив шаг обновления:
$ hg clone -U <url>
Теперь проблема сводится к «как мне обновить до версии с проблемным файлом .hgsub /.hgsubstate?» Здесь есть две возможности:
-
переназначение вложенных репозиториев с помощью функции [вложенные пути] (см. Подраздел справки hg и конфигурацию справки hg)
-
обновление и исправление вручную
«Обновление вручную» можно выполнить следующим образом:
$ hg revert -a -r default -X problematic-file
[adding a bunch of files]
$ hg debugrebuildstate -r default
Теперь вы можете вручную исправить свои вложенные репозитории и .hgsub и зафиксировать. Обязательно протестируйте свое исправление с помощью клона, прежде чем нажимать на него.
Кроме того, смотрите эту тему списка рассылки по теме: http://markmail.org/thread/ktxd2rsm7avkexzr
Ответ №3:
Возможно, было бы проще изменить DNS в качестве быстрого обходного пути (например, файл hosts в Windows), а затем исправить .hgsub.