Подтвердить что ты не робот

Каков правильный способ обработки вложенных репозиториев Hg с помощью Mercurial/TortoiseHg?

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

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

Я хотел бы отслеживать каждый плагин независимо (совершая и нажимая 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. Затем я смог записать весь каталог.

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

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

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

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

4b9b3361

Ответ 1

Мне наконец-то удалось заставить его работать так, как мне хотелось бы. Я использую 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.
  • Тогда я смог либо выполнить основной репозиторий root, либо плагин1 репо независимо

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

Ответ 2

Вам следует попробовать:

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