Оглавление subrepos

Подхранилища

    Подхранилища позволяют вложить несколько внешних хранилищ или проектов в
    родительское хранилище Mercurial и выполнять над ними команды как над
    единой группой.

    В настоящее время поддерживаются подхранилища Mercurial, Git и Subversion.

    Подхранилища включают три компонента:

    1. Извлеченные рабочие копии вложенных хранилищ. Они могут находится где
       угодно в рабочем каталоге.
    2. Ссылки на вложенные хранилища. Они определяются в файле ".hgsub",
       который должен находиться в корне рабочего каталога, и описывают,
       откуда были извлечены копии подхранилищ. Подхранилища Mercirial имеют
       такие пути:

         path/to/nested = https://example.com/nested/repo/path

       Поддерживаются также подхранилища Git и Subversion:

         path/to/nested = [git]git://example.com/nested/repo/path
         path/to/nested = [svn]https://example.com/nested/trunk/path

       где "path/to/nested" - путь к извлеченной рабочей копии относительно
       корня родительского хранилища Mercurial, а
       "https://example.com/nested/repo/path" - путь к хранилищу- источнику.
       Источник может быть также путем в файловой системе.

       Обратите внимание, что ".hgsub" по умолчанию не существует в хранилищах
       Mercurial, вам надо создать его и добавить в родительское хранилище
       перед использованием подхранилищ.

    3. Состояния вложенных хранилищ. Они определяются в файле ".hgsubstate",
       который должен находиться в корне рабочего каталога, и содержат
       информацию, необходимую для дальнейшего восстановления подхранилищ до
       состояния, в котором они были зафиксированы в родительское хранилище.
       Mercurial записывает состояния вложенных хранилищ автоматически при
       фиксации родительского хранилища.

       Примечание:
          Файл ".hgsubstate" не следует редактировать вручную.

    Добавление подхранилища
    =======================

    Если файл ".hgsub" не существует, создайте его и добавьте в родительское
    хранилище. Клонируйте или извлеките внешние проекты в каталог, в котором
    они будут размещаться в родительском хранилище. Отредактируйте файл
    ".hgsub", добавив туда запись для подхранилища как описано выше. Начиная с
    этого момента, это подхранилище контролируется Mercurial, и при следующей
    фиксации в файле ".hgsubstate" будет зафиксировано его состояние и
    выполнена привязка к нему зафиксированного набора изменений.

    Синхронизация подхранилища
    ==========================

    Подхранилища не отслеживают автоматически изменения в их источниках.
    Вместо этого они обновляются до ревизии, соответствующей ревизии,
    извлеченной уровнем выше. Это сделано для того, чтобы разработчики всегда
    имели целостный набор кода и библиотек, когда они обновляются.

    Таким образом, обновление подхранилища необходимо выполнять вручную.
    Просто извлеките желаемую ревизию подхранилища, протестируйте ее в
    родительском хранилище и выполните commit в родительском хранилище, чтобы
    зафиксировать новую комбинацию.

    Удаление подхранилища
    =====================

    Чтобы удалить подхранилище из родительского хранилища, удалите ссылку на
    него из файла ".hgsub", после чего удалите его файлы.

    Взаимодействие с командами Mercurial
    ====================================

    add           не обрабатывает подхранилища рекурсивно, если не указан ключ
                  -S/--subrepos. Однако, если вы укажете полный путь к файлу
                  из подхранилища, он будет добавлен даже без -S/--subrepos.
                  Подхранилища Git и Subversion в настоящий момент молча
                  игнорируются.
    archive       archive не обрабатывает подхранилища рекурсивно, если не
                  указана опция -S/--subrepos.
    commit        commit создает целостный снимок состояния всего проекта и
                  его подхранилищ. Если хотя бы одно подхранилище было
                  изменено, выполнение прерывается. Можно заставить Mercurial
                  вместо этого фиксировать все измененные подхранилища с
                  помощью -S/--subrepos или настройкой
                  "ui.commitsubrepos=True" в конфиге (см. "hg help config").
                  После того, как измененных подхранилищ не осталось, их
                  состояние записывается и фиксируется в основном хранилище.
    diff          diff не обрабатывает подхранилища рекурсивно, если не
                  указана опция -S/--subrepos. Различия отображаются как
                  обычно для элементов подхранилищ. Хранилища Subversion в
                  настоящее время молча игнорируются.
    forget        forget в настоящее время обрабатывает только точные
                  совпадения имен файлов в подхранилищах. Хранилища Subversion
                  в настоящее время молча игнорируются.
    incoming      incoming не обрабатывает подхранилища рекурсивно, если не
                  указан параметр -S/--subrepos. Подхранилища Subversion в
                  настоящее время молча игнорируются.
    outgoing      outgoing не обрабатывает подхранилища рекурсивно, если не
                  указан параметр -S/--subrepos. Подхранилища Subversion в
                  настоящее время молча игнорируются.
    pull          pull не обрабатывает подхранилища рекурсивно, т.к. до
                  выполнения "hg update" не ясно, что затягивать. Перечисление
                  и передача изменений во всех подхранилищах, на которые
                  ссылаются затянутые ревизии родительского хранилища в лучшем
                  случае дорого, либо вообще невозможно в случае с Subversion.
    push          Mercurial автоматически выполняет push сначала для всех
                  подхранилищ при выполнении push для родительского хранилища.
                  Это позволяет быть уверенным, что новые изменения в
                  подхранилищах будут доступны, когда на них ссылаются
                  хранилища уровнем выше. Push не делает ничего для
                  подхранилищ Subversion.
    status        status по умолчанию не обрабатывает подхранилища рекурсивно,
                  если не указан -S/--subrepos. Изменения в подхранилищах
                  отображаются как обычные изменения в элементах подхранилища.
                  Хранилища Subversion в настоящее время молча игнорируются.
    update        update восстанавливает подхранилища до состояния, в котором
                  они были зафиксированы в целевой ревизии. Если записанная
                  ревизия недоступна, Mercurial сначала затянет ее до
                  обновления. Это значит, что обновление может потребовать
                  доступа к сети при использовании подхранилищ.

    Переназначение источников подхранилищ
    =====================================

    Местоположение источников подхранилищ может меняться в течение жизни
    проекта, делая ссылки, хранящиеся в истории родительского хранилища,
    некорректными. Чтобы исправить это, можно определить правила
    переназначения в файле "hgrc" родительского хранилища или в конфиге
    Mercurial. Подробнее см. секцию "[subpaths]".