Возможен ли плагин hg-bzr?

Интересно, почему нет плагина Mercurial для работы с Launchpad/Bazaar от Mercurial? Существуют ли какие-либо технические ограничения, которые делают невозможным использование локального хранилища / клона Mercurial для работы с удаленными репозиториями Bazaar?

1 ответ

Решение

Обратное (bzr-hg) действительно существовало, но этот плагин был отменен в 2012 году. См. https://launchpad.net/bzr-hg. Я подозреваю, что плагин hg-bzr не появился по тем же причинам, по которым мы отказались от плагина bzr-hg, в дополнение к тому, что популярность bzr просто пошла на спад - поэтому плагин менее необходим.

Одна из проблем с плагином bzr-hg заключалась в том, что и Bazaar, и Mercurial имеют низкоуровневые API, которые (менялись) достаточно часто, чтобы плагин регулярно ломался.

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

Mercurial и Bazaar имеют ряд функций, которые сложно сопоставить между ними.

  • Информация в манифестах Mercurial и кадастрах Bazaar не может быть легко преобразована туда и обратно - вам нужны таблицы поиска для информации об идентификации файла
  • Свойства ревизии Bazaar аналогичны дополнениям Mercurial, но они не поддерживают специальные символы (или наоборот)
  • Mercurial не поддерживает "призрачные ревизии", ревизии, на которые есть ссылки, но которые отсутствуют в репозитории
  • Mercurial не имеет концепции идентификаторов файлов, поэтому идентификаторы файлов должны храниться в другом месте в хранилище, как специальный файл
  • Mercurial не поддерживает пустые каталоги, авторов с несколькими коммитами или ревизии с более чем двумя родителями ("слияние осьминогов", в терминологии Git)

Эти вещи намного проще при взаимодействии с Git, потому что он является адресно-ориентированным и более простым (например, он не имеет графы ревизий для каждого файла). Hg-Git или Bzr-Git могут просто импортировать все, что у вас есть в Git, в Mercurial, и до тех пор, пока вы в конечном итоге преобразуете его обратно в Git с тем же представлением, вы получаете такой же коммит SHA, как и изначально.

Другие вопросы по тегам