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

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

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

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

то, что я сделал до сих пор, это создание нового РЕПО для каждого из моих плагинов. Я могу легко зафиксировать и подтолкнуть их к BitBucket. Но когда я пошел, чтобы зафиксировать мой" главный " репозиторий, TortoiseHg отображает сообщение об ошибке, говорящее, что abort: path 'mainrepopluginsplugin1plugin1.php' is inside repo 'mainrepopluginsplugin1'.

Я использую ночь как Mercurial, так и TortoiseHg (ToirtoiseHg версии 0.9.3+237-ea50f793bbe4 и Ртутный-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 to .hgsub, но когда я попытался совершить это, меня встретили abort: path 'app/plugins/plugin1/file1.php' is inside repo 'apppluginsplugin1'

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

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

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

2 ответов


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

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

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

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


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

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