2010-10-30 5 views
16

Я пытаюсь настроить проект с помощью битбакет, который имеет зависимости проекта, размещенный в github. Используя плагин Hg-Git Mercurial, я могу почти добраться туда.Добавление подэлемента Git в Mercurial

Но когда наступает время толчка, все становится хлопотно.

Документация для Mercurial subrepositories состояний:

2,4 Нажимные

Mercurial будет автоматически пытаться первый толчок все subrepos текущего хранилища, когда вы нажимаете. Это обеспечит доступность новых наборов изменений в subrepos при обращении к репозиториям верхнего уровня.

Но это вызывает большую проблему, так как я не хочу выталкивать все субрепозитории (почему бы мне?). У меня только доступ к ним для чтения, поэтому github этого не допустит. Только основной репозиторий должен быть перенаправлен на удаленный сервер, но я не могу понять, как это сделать. hg хочет взять управление и нажать все субрепозитории, независимо от того, есть или нет изменения. Есть ли способ обойти эту функцию ?

Единственными вещами, которые необходимо нажать, являются .hgsub и .hgsubstate. Как только они будут перенаправлены через альтернативные маршруты (обновление до набора изменений, где субрепозитории не существуют), можно затем обновить и вытащить изменения из удаленных репозиториев, но если я должен снова нажать, пока в наборе изменений с помощью субрепозитории, все испытания повторяются.

ответ

4

Это не представляется возможным из-за метод Mercurial в толкании. Это по дизайну ошибка.

Лучшим решением является обновление до предыдущей версии, где субрепозитории не существуют, а затем нажмите. Это обходит ограничение Mercurial и загружает необходимые файлы .hgsub и .hgsubstate. Это немного неудобно, но это лучший способ, который я нашел до сих пор, чтобы заставить Mercurial и Git работать друг с другом.

Возможно, в будущем Hg-Git будет обновлен, чтобы обрабатывать этот случай использования автоматически.

+0

это ошибка, которая проявляется при использовании github, hg-git и функции subrepository, попробуйте использовать собственный репозиторий git –

0

Если у вас нет исходящих наборов изменений в подрепозитории, то «push» фактически не должен делать ничего, кроме как получить последний список наборов изменений из удаленного репозитория. Поэтому фактическая «толчка» части нажатия не произойдет. Я успешно использовал репозитории BitBucket для чтения только как подмодули.

+0

Да, это должно быть именно то, что он делает - однако на самом деле это происходит, просто если нет изменений, ничего не будет загружено. Github заставляет вас проверять подлинность, прежде чем проверять, есть ли какие-либо изменения. Поэтому для этого нужно полностью игнорировать толчок. – summatix

1

Я думаю, вы должны использовать несколько репозиториев; DVCS работает лучше.

Например, создайте один репозиторий, содержащий зависимости от github. Вы только втягиваете это репо, чтобы получить изменения, вы никогда не нажимаете. Тогда у вас есть другой репозиторий для вашего проекта, для разработки. Здесь вы можете делать все, что захотите. А затем вы ссылаетесь на свой собственный регго hg для зависимостей.

Вот если я правильно понял вашу проблему и то, что вы пытаетесь сделать :)

+1

Извините, я не понимаю. Моя проблема в том, что мне нужны Mercurial и Git, чтобы играть красиво с каждым, что они делают. Но так называемая особенность hg делает вещи немного хлопотными. – summatix

+0

Это не «так называемая функция», это важный шаг в работе с hg. Push/pull синхронизирует ваш локальный репозиторий с удаленным. Я предлагаю, что вам может понадобиться другая конфигурация репозитория для того, что вы пытаетесь сделать; обычно при использовании git/mercurial есть несколько хранилищ для вашего проекта. Нажатие вашего меркуриального репо не должно влиять на материал, который вы пытаетесь получить от github, и, конечно же, вы не должны вдаваться в репозиторий github. –

+1

Мы явно на разных игровых площадках здесь – summatix

11

Для дальнейшего использования ветка развития mercurial (и, следовательно, предстоящий выпуск 1.8) теперь поддерживает родной git subrepos.Этот конкретный случай реализован очень хорошо, и нажатие из корневого репозитория будет только сообщать git subrepo нажать, если его удаленный репозиторий не известен как текущий фиксатор.

+0

. Вот некоторые подробности для встроенной поддержки встроенного git subrepo внутри mecurial http://mercurial.selenic.com/wiki/Subrepository#Git_subrepositories –

Смежные вопросы