Как правильно обрабатывать вложенные репозитории 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. Я читал, что в эту сборку TortoiseHg была добавлена ​​обработка подрепо, но я даже не уверен, что подрепо - это функция, которую я должен здесь использовать.

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

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

Я зашел в приложение / плагины и клонировал плагин (названный 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.


person pixelastic    schedule 03.03.2010    source источник
comment
Из документа строка с .hgsub - это первый «вложенный» путь в нашем рабочем каталоге, а второй - это URL-адрес или путь, из которого нужно извлечь: поэтому вы не должны указывать app/plugins/plugin3 = app/plugins/plugin3, а app/plugins/plugin3 = bitbucket url for plugin3. То же для plugin1   -  person VonC    schedule 04.03.2010
comment
Я пробовал это, используя http://bitbucket.org/username/plugin3/, https://[email protected]/username/plugin3/ и даже ssh://[email protected]/username/plugin3 в качестве URL-адреса, но все равно имел то же сообщение об отмене. Я все время пробовал прямо из командной строки, и результат тот же.   -  person pixelastic    schedule 04.03.2010
comment
извините за то, что не ответил на ваш последний комментарий, но если ваш комментарий не начинается с «@VonC», я не буду уведомлен. См. blog.stackoverflow.com/2010/01/new-improved-comments-with- ответить (раздел Комментарий @username Уведомления)   -  person VonC    schedule 04.03.2010
comment
@VonC: Хорошо, новичок в Stack Overflow, не знал этого. Спасибо.   -  person pixelastic    schedule 05.03.2010


Ответы (2)


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

person pixelastic    schedule 05.03.2010
comment
Сладкий. Вы ответили на несколько моих вопросов. - person CAD bloke; 28.07.2010

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

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

person VonC    schedule 03.03.2010
comment
Нужно ли мне вручную редактировать файлы .hgsub или TortoiseHg справляется с этим самостоятельно (возможно, проверяя некоторые параметры)? - person pixelastic; 03.03.2010
comment
@VonC: Спасибо, но я уже прочитал эту статью, и я не хочу, чтобы мои плагины были в отдельной папке в качестве основного приложения, я бы хотел, чтобы они были подкаталогами. Я обновил основной вопрос своим прогрессом. Спасибо за ваше время - person pixelastic; 04.03.2010
comment
@VonC: Хорошо, наконец-то удалось заставить его работать. Мне пришлось сказать hg, чтобы она перестала отслеживать существующие плагины, зафиксировать и повторно клонировать плагины. Спасибо за вашу помощь, очень признателен. - person pixelastic; 04.03.2010
comment
@Pixelastic: спасибо за отзыв. Не могли бы вы опубликовать ответ с подробным описанием последовательности команд, которым вы следовали для выполнения этой работы (и ссылаться на свои плагины как на surepos)? Я бы проголосовал за это;) - person VonC; 04.03.2010
comment
@VonC: Я добавил подробный ответ со всеми своими шагами. - person pixelastic; 05.03.2010