Клонируя ртутный репозиторий, .hgsub ссылается на мертвый внешний подрепортаж. - PullRequest
5 голосов
/ 01 октября 2011

Мы пытаемся клонировать репозиторий Mercurial A, в котором он ссылается на под-репозиторий B, в который перемещены хосты.Мы хотели бы обновить .hgsub в A, чтобы он указывал на новое местоположение B, но это проблема курицы и яйца, если мы не можем вначале создать hg клона A.

Кто-нибудь знает, как это сделать?обойти это?

Ответы [ 2 ]

5 голосов
/ 06 октября 2011

Во-первых, обратите внимание, что клон - это init + pull + update и что клонирование субрепаратов является частью шага обновления, не шага pull. Это означает, что вы можете избежать сбоя клонирования, просто пропустив шаг обновления:

$ hg clone -U <url>

Теперь проблема сводится к тому, «как мне обновить версию с проблемным файлом .hgsub / .hgsubstate?» Здесь есть две возможности:

  • переназначение подпунктов с использованием функции [subpaths] (см. Hg help subrepo и hg help config)

  • ручное обновление и ремонт

«Ручное обновление» можно сделать так:

$ hg revert -a -r default -X problematic-file
[adding a bunch of files]
$ hg debugrebuildstate -r default

Теперь вы можете вручную исправить ваши subpopos и .hgsub и зафиксировать. Обязательно проверьте исправление с помощью клона, прежде чем нажимать его.

Также смотрите эту ветку списка рассылки по теме: http://markmail.org/thread/ktxd2rsm7avkexzr

4 голосов
/ 01 октября 2011
$ 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].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...