Могу ли я вложить вложенные элементы в Mercurial? - PullRequest
8 голосов
/ 13 сентября 2011

У меня проблемы с настройкой проекта в Mercurial с подпунктами.

Цель:

Я хочу настроить структуру следующим образом:

-- Build_Repo (this repo will be used to track dependencies)
  -- Subrepo_A (this is the main source)
    -- Modules (Part of Subrepo_A)
      -- Subrepo_B 

Таким образом, существует три репозитория: Build, A и B. B вложен в A, A вложен в репозиторий корневой сборки. Репозиторий сборки будет использоваться для отслеживания зависимостей, субрепарат A будет использоваться для отслеживания основных исходных файлов, а субрепарат B (и другие) будет использоваться для отслеживания разработки модулей / плагинов.

Проблема / Вопрос

У меня нет проблем с настройкой исходного репозитория сборки и вложенного Subrepo_A, просто добавив путь и источник Subrepo_A в файл .hgsub и передав его в репозиторий сборки. Однако когда я добавляю путь / источник subrepo_B в репозиторий сборки .hgsub, а затем пытаюсь зафиксировать, я получаю сообщение об ошибке:

прервать: путь 'Subrepo_A / Modules / Sebrepo_B' находится во вложенном репо 'Subrepo_A'

Mercurial, похоже, не нравится вложенное репо внутри уже вложенного репо. Это правда или я что-то упустил? Какие-нибудь лучшие идеи о том, как управлять сборками / зависимостями?

Ответы [ 2 ]

1 голос
/ 04 июля 2012

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

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

Раствор 1

Subrepo_B на самом деле является зависимостью от Subrepo_A. В этом случае сделайте свои репозитории отражающими истинную зависимость, отредактировав файл .hgsub Subrepo_A, добавив Subrepo_B в Modules / Sebrepo_B. Это работает, потому что Subrepo_A сохраняет контроль над своими папками.

Решение 2

Subrepo_A не зависит от Subrepo_B, вы поместили его туда для удобства. В этом случае вы должны сделать так, чтобы Subrepo_A и Subrepo_B были вложенными (в разных местах) Build_Repo.

0 голосов
/ 13 сентября 2011

В вашей ситуации вам нужно будет добавить subrepoB к subrepoA.

Я бы предложил попытаться переместить зависимости так, чтобы в вашем дереве было только 2 уровня, но это может быть невозможно.В противном случае это всегда не очень приятный опыт.

...