bazaar git vcs

Используем Tailor для преобразования Bazaar -> Git

Dmitry Vasiliev 12:33, 2009 12 2

Вчера понадобилось преобразовать ветку Bazaar в Git. Покопался в интернете - практически везде советуют использовать Tailor. Чуть позже выяснилось, что кроме преобразования Bazaar -> Git нужно еще немного подправить историю изменений, а именно исправить e-mail автора. Оказалось, что Tailor может и это.

Для случая изменения истории нужно использовать Python скрипт в качестве файла конфигурации Tailor. У меня получился следующий скрипт:

#! /usr/bin/env tailor
"""
[DEFAULT]
patch-name-format = ""

[project]
source = bzr:project
target = git:project
start-revision = INITIAL
root-directory = /path/to/the/root
before-commit = before_commit
after-commit = after_commit

[bzr:project]
repository = /path/to/the/bzr/branch
subdir = project-bzr

[git:project]
subdir = project
"""

def before_commit(wd, changeset):
    changeset.author = "Dmitry Vasiliev <dima@hlabs...>"
    return changeset

def after_commit(wd, changeset):
    print changeset
    print

После создания скрипта нужно дать ему права на выполнение и можно конвертировать.

Разберем скрипт подробнее:

  • Заметьте, что первая строка скрипта указывает, что он должен выполняться через tailor
  • Строка документации на уровне модуля служит текстом файла конфигурации. Из наиболее интересного:
    • Секция [DEFAULT] содержит опции по-умолчанию, где patch-name-format = "" говорит, что не надо трогать комментарии к изменениям
    • Секция [project], где в имени нет ':', описывает конфигурацию проекта:
      • Параметры source/target - секции с описанием веток Bazaar и Git, соответственно
      • root-directory - директорий где будет происходить все преобразование
      • before_commit/after_commit - функции, которые будут вызваны, соответственно, до преобразования и после
    • Секция [bzr:project] описывает детали ветки Bazaar - путь к ветке и поддиректорий root-directory в котором будет храниться копия ветки
    • Секция [git:project] описывает детали репозитория Git - поддиректорий root-directory в котором будет храниться новая ветка Git
  • Функция before_commit исправляет автора изменений
  • Функция after_commit просто печатает изменения на экран, т.к. я не стал включать подробный лог работы

Comments All comments

Comment by bialix on 14:53, 2009 12 2

bialix's Gravatar

Чем тебе fastimport не угодил?

Comment by Dmitry Vasiliev on 15:29, 2009 12 2

Dmitry Vasiliev's Gravatar

Не знаю, пока с Tailor кажется проще. :-)

Add comment

Name:
Email: (Never will be published.)
Web site:
Comment: (Paragraphs divided by empty lines, line breaks and links will be automatically formatted.)