Как правильно обрабатывать вложенные репозитории Hg с помощью Mercurial / TortoiseHg? - PullRequest
22 голосов
/ 03 марта 2010

Я борюсь за то, как правильно отслеживать вложенные репозитории с помощью TortoiseHg.

У меня есть главный репозиторий, который отслеживает весь мой проект. Этот проект содержит несколько маленьких плагинов, которые хранятся в подкаталоге плагинов / *.

Я бы хотел отслеживать каждый плагин независимо (фиксируя и передавая в BitBucket для каждого из них), в то же время имея возможность сделать «целую» фиксацию моего проекта, включая изменения, внесенные в плагины и отправку их в другое местоположение (не BitBucket).

То, что я до сих пор делал, - это создание нового репо для каждого из моих плагинов. Я могу легко зафиксировать и отправить их в BitBucket. Но когда я пошел, чтобы зафиксировать свой «основной» репозиторий, TortoiseHg отображает сообщение об ошибке, говорящее, что abort: path 'mainrepo\\plugins\\plugin1\\plugin1.php' is inside repo 'mainrepo\\plugins\\plugin1'.

Я вижу, что делаю что-то не так, но не могу сказать, что.

Я использую каждую ночь как Mercurial, так и TortoiseHg (ToirtoiseHg версии 0.9.3 + 237-ea50f793bbe4 и Mercurial-1.4.3 + 225-70dea42c9406) на WinXP. Я читал, что обработка subrepos была добавлена ​​в эту сборку TortoiseHg, но я даже не уверен, что subrepos - это функция, которую я должен использовать здесь.

Обновление
Я добился определенного прогресса, но все еще не могу заставить его работать так, как мне хотелось бы.
Вот моя структура:

-- .hg
-- core
-- app
    -- file.php
    -- file.css
    -- plugins
        -- plugin1
            -- file1.php
        -- plugin2
            -- file2.php

Я пошел в app / plugins и клонировал плагин (названный plugin3) из BitBucket здесь. Затем я создал файл .hgsub в корне и добавил app/plugins/plugin3 = app/plugins/plugin3 к нему. После этого я смог зафиксировать весь каталог.

Но затем я попытался получить последнюю версию plugin1 из BitBucket, поэтому я пошел в app / plugins, удалил папку plugin1 / и клонировал plugin1 из BitBucket. Затем я добавил app/plugins/plugin1 = app/plugins/plugin1 в .hgsub, но когда я попытался зафиксировать его, меня встретили abort: path 'app/plugins/plugin1/file1.php' is inside repo 'app\\plugins\\plugin1'

Кажется, что проблема возникает, когда мой подпункт содержит то же имя, что и каталог, уже отслеженный Hg в каталоге plugins /.

Что я делаю не так? Должен ли я добавить / изменить что-то особенное в .hg моих плагинов?

Обновление
Наконец-то мне удалось заставить его работать так, как я хочу.
Мне пришлось «вручную» сказать Mercurial удалить каталоги plugins / plugin1, plugins / plugin2, зафиксировать изменение, затем клонировать обратно plugin1 и plugin2 из BitBucket, добавить app/plugins/plugin1 = app/plugins/plugin1 в .hgsub и зафиксировать все. Это сработало.
Важным шагом была фиксация после удаления папок plugin1 / plugin2.

Ответы [ 2 ]

18 голосов
/ 05 марта 2010

Мне наконец-то удалось заставить это работать так, как я бы любил. Я использую TortoiseHg на winXP, поэтому я не смогу рассказать вам, какие hg-вызовы были сделаны внутри, но я не думаю, что здесь используется что-то необычное.

Я начал с существующего репо, внутри которого у меня был каталог plugins/, заполненный каталогами plugin1/, plugin/2 (не репозитории, а простые каталоги). У меня также были эти плагины онлайн, размещенные на BitBucket.

  • Сначала я зашел в свой каталог plugins/, щелкнув правой кнопкой мыши по plugin1/, TortoiseHg => Remove Files.
  • Я возвращаюсь в корень репо, щелкаю правой кнопкой мыши и Hg Commit
  • Затем я вернулся в свой каталог plugins/, щелкнув правой кнопкой мыши, TortoiseHg => Clone..., я выбрал http-адрес плагина в сегменте битов (http://bitbucket.org/username/plugin1/ и нажал Done
  • Обратно снова в корень основного репо. Я создал (или отредактировал, если файл уже существовал) файл .hgsub и добавил в него строку plugins/plugin1 = plugins/plugin1.
  • Затем я смог зафиксировать основной корневой репозиторий или репозиторий plugin1 независимо

Обратите внимание, что дополнительные шаги remove и commit требуются только в том случае, если вновь клонированное хранилище имеет то же имя уже отслеженного каталога.

5 голосов
/ 03 марта 2010

Вы должны попробовать использовать:

  • Расширение Лес или
  • (лучший выбор, потому что официально в Hg): функция Subrepo

Подпозитории - это функция, позволяющая рассматривать коллекцию репозиториев как группу.
Это позволит вам клонировать, фиксировать, отправлять и извлекать проекты и связанные с ними библиотеки в виде группы.

...