Как правильно обрабатывать вложенные репозитории 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
шаги требуются только в том случае, если новое клонированное РЕПО имеет то же имя уже отслеживаемого каталога.
вы должны попробовать использовать:
- на лес расширением или
- (лучший выбор, потому что официально в Hg):функция Subrepo
Subrepositories-это функция, которая позволяет обрабатывать коллекцию репозиториев как группу.
Это позволит вам клонировать, фиксировать, подталкивать и вытягивать проекты и связанные с ними библиотеки как группу.