Возможен ли плагин 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, как и изначально.