Переход С Mercurial На Git В Atlassian Bitbucket С Сохранением Файлов На Кириллице



Фон Еще летом в официальном блоге BitBucket был опубликован записывать , который объявил об окончании поддержки репозиториев Mercurial. Поддержка Mercurial будет прекращена в два этапа:

  1. С 1 февраля 2020 года пользователи больше не смогут создавать новые репозитории.

  2. С 1 июня 2020 года пользователи больше не смогут использовать функции Mercurial в Bitbucket или через его API, а все репозитории Mercurial будут удалены.

Причины такого решения более-менее понятны, но в своей работе я использую несколько репозиториев на Mercurial (Mercurial мне всегда нравился больше, но этот вопрос я оставлю за рамками данной статьи), которые нужно было конвертировать в GIT. Собственно, вот тут и началось.



Проблема

Разработчики и поддержка BitBucket предложили несколько вариантов такой конвертации, я попробовал их все, а заодно попробовал сторонние инструменты, например импортировать репозитории на Гитхабе.

Оказалось, что все эти инструменты портят имена файлов и каталогов, содержащих символы кириллицы, а таких файлов у меня очень много (ТОР, спецификации и другие подобные файлы).

Забавно, что комментарии к коммитам, содержащие кириллицу, прекрасно переносятся и отображаются после переноса.

В Интернете я нашел информацию о том, что в Mercurial есть инструменты (ключи в конфиг-файле репозитория), позволяющие управлять кодировкой символов по умолчанию, но, во-первых, они включаются только явно, а во-вторых, нет инструмента для конвертации существующего репозитория.

Ну, насколько этот вариант помогает при миграции с использованием готовых инструментов, я не проверял — мне уже поздно идти по этому пути.

Желания вручную искать проблемные файлы и делать ручную перезаливку не было, поэтому пришлось немного покопаться и найти решение.

Возможно, для кого-то перенос репозитория с русскими символами в именах файлов тоже актуален и моя статья сэкономит немного времени.



Решение



Основная процедура

  1. Заведите себе репозиторий [email protected]:seewindcn/tortoisehg.git — он содержит плагин fixutf8, которого нет в основном дистрибутиве.

    Ниже предполагается, что локальная копия будет расположена в каталоге D:\Development\tortoisehg.

  2. Сделать копию его Репозиторий Mercurial, чтобы не повредить основную локацию.

    Далее все команды выполняются в каталоге копирования.

  3. Исправьте имена файлов и каталогов с помощью команды D:\Development\tortoisehg\hg.exe addremove -s 100
  4. Сделать коммит в репозиторий D:\Development\tortoisehg\hg.exe commit -m «Исправить имена файлов»
  5. Включаем плагин hggit — в файл .

    hg\hgrc нужно добавить [расширения] хггит =

  6. Готовимся к преобразованию в GIT — создайте главную метку с помощью команды Закладка D:\Development\tortoisehg\hg.exe -r мастер по умолчанию
  7. Создание репозитория GIT в BitBucket
  8. Делаем коммит в репозиторий hg нажмите git+ ssh://[email protected] : / .

    git ( внимание , здесь используется стандартный hg, потому что клон отseewindcn не хочет работать по SSH)

  9. Проверяем на сайте BitBucket, убеждаемся, что имена файлов кириллицей не нарушены
  10. Клонируем GIT-репозиторий к себе, проверяем имена файлов, выполняем побайтовое сравнение всех файлов, собираем проект, тестируем
  11. После сборки вероятно появится много новых файлов, которые GIT предложит закоммитить.

    Файл .

    hgignore необходимо вручную преобразовать в .

    gitignore. К счастью, вы можете сделать это один раз и использовать один файл для всех остальных репозиториев.

В результате нам удалось перенести основную ветку по умолчанию исходного репозитория Mercurial со всей историей коммитов в главный GIT-репозиторий и даже с тегами.

Из минусов отмечу лишь полное отсутствие информации об изменениях файлов с кириллицей в истории коммитов - коммиты есть, но о файлах с кириллицей нет даже упоминаний (остальные файлы, конечно, есть в идеальный порядок).

В целом задачу можно было считать выполненной, но из спортивного интереса мне было интересно еще и переместить оставшиеся ветки.



Перемещение ветвей, отличных от стандартных

  1. Получить список ветвей hg ветвей
  2. Для каждого филиала
    1. Переключиться на ветку стой вверх
    2. Создайте тег (имя тега не должно совпадать с именем ветки): закладка hg -r
    3. Отправить ветку в GIT hg push [email protected]: / .

      git

Может случиться так, что название ветки будет содержать и кириллицу, и в этом случае в ветках hg будут отображаться кракозябры.

В данном случае я использовал инструментальную среду Visual hg — переключился на ветку и создал там тег.

Это место наполнено фэн-шуй.

Если кому-то интересно копнуть глубже, оставлю.



Список использованной литературы

Теги: #git #github #Mercurial #BitBucket #BitBucket Cloud #Cyrillic #atlassian #Кириллические символы #Конверсия
Вместе с данным постом часто просматривают: