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