Переход с Mercurial на GIT в Atlassian Bitbucket с сохранением файлов в кириллице
Предыстория
Ещё летом в официальном блоге BitBucket опубликовали запись, в которой сообщили об окончании поддержки репозиториев Mercurial.
Прекращение поддержки Mercurial будет проходить в два этапа:
С причинами такого решения всё более-менее понятно, но я в работе использую несколько репозиториев на Mercurial (Mercurial мне всегда больше нравился, но этот вопрос я оставлю за рамками данной статьи), которые потребовалось сконвертировать в GIT.
Собственно, на этом месте началась…
Проблема
Разработчики и служба поддержки BitBucket предложили несколько вариантов такой конвертации, я их всех перепробовал, а заодно попробовал сторонние инструменты, наподобие импорта репозиториев в GitHub.
Выяснилось, что все эти инструменты портят имена файлов и каталогов, которые содержат символы в кириллице, а у меня полно таких файлов (ТЗ, спецификации и прочие подобные файлы). Забавно, что комментарии к коммитам, содержащие кириллицу, прекрасно переносятся и отображаются после переноса.
В просторах интернета находил информацию о том, что в Mercurial есть инструменты (ключи в конфиг-файле репозитория), которые позволяют управлять кодировкой символов по умолчанию, но во-первых, они включаются только явно, а во-вторых, нет инструмента преобразования существующего репозитория. Ну и я не проверял, насколько эта опция помогает с миграцией при помощи готовых инструментов — мне уже поздновато этим путём идти.
Вручную искать проблемные файлы и делать ручную перезаливку желания не было, поэтому пришлось немного покопаться и найти решение.
Возможно, кому-то перенос репозитория с русскими символами в именах файлы тоже актуален и моя статья сэкономит немного времени.
Решение
Базовая процедура
[extensions]
hggit =
В результате удалось основную ветку default исходного репозитория Mercurial перенести со всей историей коммитов в master репозитория GIT и даже с метками. Из минусов отмечу только полное отсутствие информации об изменениях файлов с кириллицей в истории коммитов — коммиты есть, а от файлов с кириллицей нет даже упоминаний (остальные файлы, естественно, в полном порядке).
В целом, задачу можно было считать выполненной, но из спортивного интереса, мне также было интересно перенести остальные ветки.
Перенос веток, кроме default
Может случиться так, что имя ветки тоже будет содержать кириллицу, в этом случае hg branches покажет кракозябры. В этом случае я использовал визуальный hg workbench — переключался на ветку и создавал метку там.
На этом месте наступает полный феншуй.
На случай, если кому-то будет интересно покопать поглубже, то оставляю…
Список использованной литературы
- github.com/seewindcn/tortoisehg (сработало)
- www.mercurial-scm.org/wiki/FixUtf8Extension (часть предыдущего решения)
- www.mercurial-scm.org/wiki/ConvertExtension#Converting_from_Mercurial (не помогло)
- serverfault.com/questions/319070/mercurial-convert-filename-encoding (использует расширение convert, не помогло)
- bitbucket.org/rominf/hg_convert_filenames_encoding/src/default (автоматизация предыдущего варианта)
- stackoverflow.com/questions/16037787/convert-mercurial-project-to-git (описывает расширение выгрузки в GIT)