Страницы

Поиск по вопросам

пятница, 24 мая 2019 г.

Переезд с mercurial на git

Здравствуйте! Есть большая проблема с переездом на git. Почему-то переезжает только одна ветка, а их полно... Использую TortoiseHg с плагином hggit. В hgrc меняю только path. Прошу помочь в этом вопросе.


Ответ

Для пингвина лучше сделать вот так:
Есть инструмент hg-fast-export
Его можно найти здесь:
git clone http://repo.or.cz/r/fast-export.git /tmp/fast-export
Нужно получить mercurial репу:
hg clone /tmp/hg-repo
Далее нужно создать файл соответствия авторов.
cd /tmp/hg-repo hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors
В /tmp/authors будет примерно следующее содержимое:
bob bob@localhost bob bob jones company com> Bob Jones Joe Smith
В примере выше, один и тот же человек (Боб) вносил изменения под пятью различными именами, лишь одно из которых правильное, а одно и вовсе не соответствует формату Git. hg-fast-export позволяет быстро исправить ситуацию, добавив ={new name and email address} к каждой строке, которую мы хотим изменить; чтобы оставить имя как есть, просто удалите нужные строки. Если же все имена выглядят хорошо, этот файл и вовсе не потребуется. В нашем примере мы хотим чтобы данные выглядели так:
bob=Bob Jones bob@localhost=Bob Jones bob jones company com>=Bob Jones bob =Bob Jones
Затем нужно создать Git репозиторий и запустить экспорт:
git init /tmp/converted cd /tmp/converted /tmp/fast-export/hg-fast-export.sh -r /tmp/hg-repo -A /tmp/authors
Флаг -r указывает на подлежащий конвертации Mercurial репозиторий, а флаг -A задаёт файл с соответствиями между авторами. Скрипт пробегается по наборам изменений Mercurial и преобразует их в скрипт для fast-import в Git. И отправляем изменение в репу гита:
git remote add origin git@my-git-server:myrepository.git git push origin --all
Для винды почти так же только немного другие команды:
cd c:\projects hg clone hg-repo git init converted git clone http://repo.or.cz/r/fast-export.git
Отредактировать c:\projects\fast-export\hg-fast-export.py. Начало этого скрипта нужно заменить на такое:
#!/usr/bin/env python
# Copyright (c) 2007, 2008 Rocco Rutte and others. # License: MIT
import sys
# import mercurial libraries from zip: sys.path.append(r'C:\Program Files (x86)\Mercurial\library.zip')
from mercurial import node from hg2git import setup_repo, fixup_user, get_branch, get_changeset from hg2git import load_cache, save_cache, get_git_sha1, set_default_branch, set_origin_name from optparse import OptionParser import re import os
Скопировать fast-export в converted игнорируя .git папку. Далее: cd converted и создайте тут файл authors.txt по аналогии из linux версии.
И hg-fast-export.sh -r c:\projects\hg-repo -A authors.txt Готово. Дальше можно заливать гит репу на сервер.

Комментариев нет:

Отправить комментарий