Фон Еще летом в официальном блоге BitBucket был опубликован записывать , который объявил об окончании поддержки репозиториев Mercurial. Поддержка Mercurial будет прекращена в два этапа:
- С 1 февраля 2020 года пользователи больше не смогут создавать новые репозитории.
- С 1 июня 2020 года пользователи больше не смогут использовать функции Mercurial в Bitbucket или через его API, а все репозитории Mercurial будут удалены.
Проблема
Разработчики и поддержка BitBucket предложили несколько вариантов такой конвертации, я попробовал их все, а заодно попробовал сторонние инструменты, например импортировать репозитории на Гитхабе.Оказалось, что все эти инструменты портят имена файлов и каталогов, содержащих символы кириллицы, а таких файлов у меня очень много (ТОР, спецификации и другие подобные файлы).
Забавно, что комментарии к коммитам, содержащие кириллицу, прекрасно переносятся и отображаются после переноса.
В Интернете я нашел информацию о том, что в Mercurial есть инструменты (ключи в конфиг-файле репозитория), позволяющие управлять кодировкой символов по умолчанию, но, во-первых, они включаются только явно, а во-вторых, нет инструмента для конвертации существующего репозитория.
Ну, насколько этот вариант помогает при миграции с использованием готовых инструментов, я не проверял — мне уже поздно идти по этому пути.
Желания вручную искать проблемные файлы и делать ручную перезаливку не было, поэтому пришлось немного покопаться и найти решение.
Возможно, для кого-то перенос репозитория с русскими символами в именах файлов тоже актуален и моя статья сэкономит немного времени.
Решение
Основная процедура
- Заведите себе репозиторий [email protected]:seewindcn/tortoisehg.git — он содержит плагин fixutf8, которого нет в основном дистрибутиве.
Ниже предполагается, что локальная копия будет расположена в каталоге D:\Development\tortoisehg.
- Сделать копию его Репозиторий Mercurial, чтобы не повредить основную локацию.
Далее все команды выполняются в каталоге копирования.
- Исправьте имена файлов и каталогов с помощью команды D:\Development\tortoisehg\hg.exe addremove -s 100
- Сделать коммит в репозиторий D:\Development\tortoisehg\hg.exe commit -m «Исправить имена файлов»
- Включаем плагин hggit — в файл .
hg\hgrc нужно добавить [расширения] хггит =
- Готовимся к преобразованию в GIT — создайте главную метку с помощью команды Закладка D:\Development\tortoisehg\hg.exe -r мастер по умолчанию
- Создание репозитория GIT в BitBucket
- Делаем коммит в репозиторий hg нажмите git+ ssh://[email protected] : / .
git ( внимание , здесь используется стандартный hg, потому что клон отseewindcn не хочет работать по SSH)
- Проверяем на сайте BitBucket, убеждаемся, что имена файлов кириллицей не нарушены
- Клонируем GIT-репозиторий к себе, проверяем имена файлов, выполняем побайтовое сравнение всех файлов, собираем проект, тестируем
- После сборки вероятно появится много новых файлов, которые GIT предложит закоммитить.
Файл .
hgignore необходимо вручную преобразовать в .
gitignore. К счастью, вы можете сделать это один раз и использовать один файл для всех остальных репозиториев.
Из минусов отмечу лишь полное отсутствие информации об изменениях файлов с кириллицей в истории коммитов - коммиты есть, но о файлах с кириллицей нет даже упоминаний (остальные файлы, конечно, есть в идеальный порядок).
В целом задачу можно было считать выполненной, но из спортивного интереса мне было интересно еще и переместить оставшиеся ветки.
Перемещение ветвей, отличных от стандартных
- Получить список ветвей hg ветвей
- Для каждого филиала
- Переключиться на ветку стой вверх
- Создайте тег (имя тега не должно совпадать с именем ветки): закладка hg -r
- Отправить ветку в GIT hg push [email protected]: / .
git
В данном случае я использовал инструментальную среду Visual hg — переключился на ветку и создал там тег.
Это место наполнено фэн-шуй.
Если кому-то интересно копнуть глубже, оставлю.
Список использованной литературы
- 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)
-
Ядерная Война
19 Oct, 24