Перенос svn репозитория в git без потери истории

Вакансии в Москве: Ведуший PHP разработчик 110-150к

Тема в разделе "ИЗБРАННОЕ", создана пользователем admin, 9 авг 2012.

  1. admin

    admin Опять хирург :-) Команда форума

    Сообщения:
    6.613
    Ваш город:
    Поварово, Московская область, Россия
    Adress:
    Povarovo, Russia
    Country:
    Location on map:
    Задача: смигрировать svn-репозиторий в git без потери истории.

    1) Устанавливаем git-svn
    Например, на Ubuntu это делается так:
    PHP:
    sudo apt-get install git-svn
    2) Собираем авторов коммитов (в SVN пользователи – это просто идентификаторы, а в git – email)
    Выполняем такой вот скрипт в папке SVN-репозитария:

    PHP:
    #!/usr/bin/env bash
    authors=$(svn log -grep -'^r' awk 'BEGIN { FS = "|" } ; { print $2 }' sort uniq)
    for 
    author in ${authors}; do
      echo 
    "${author} = NAME <EMAIL>";
    done
    Результат работы скрипта сохраняем куда-нибудь в ~/svn-authors,
    не забывая заполнить реальные адреса.
    admin = Papa <papa@gmail.com>

    3) Выполняем в консоли
    PHP:
    mkdir project_tmp
    cd project_tmp
    git svn init http
    ://code.yoursite.net/svn/trunk/ --no-metadata
    git config svn.authorsfile ~/svn-authors
    git svn fetch
    1-2 строки - создаём новый каталог для временного репозитория.
    3 - инициализирует каталог как гибридный git-svn и указывает origin на исходный репозиторий.
    4 - указываем карту комиттеров
    5 - забираем содержимое

    После некоторого ожидания можно проверить, что пользователи смапились корректно (git log). Затем нужно склонировать этот временный репозиторий (git clone) в новый "чистый", чтобы избавиться от svn-хвоста для поддержки git-svn. Вторая строка "забывает" временную папку откуда был взят проект. Третья привязывает к рассшареному репозиторию (не обязательно)

    PHP:
    git clone project_tmp  project_dev
    git remote rm origin
    Загружаем на общий сервер разработки
    PHP:
    git remote add origin ssh://admin@site.ru/srv/git/project_dev.git
    git push -u origin master
    P.S. Есть еще способ через clone но он у меня не сработал (видимо из-за больших файлов в svn )
    PHP:
    git svn clone ---authors-file=~//svn-authors http://code.yoursite.net/svn/trunk/
     
  2. baev

    baev ‹°°¬• Команда форума

    Сообщения:
    3.421
    Adress:
    Moskva, Russia
    Country:
    Location on map:
    admin, Вы действительно считаете, что это — «теория программирования»?
     
  3. admin

    admin Опять хирург :-) Команда форума

    Сообщения:
    6.613
    Ваш город:
    Поварово, Московская область, Россия
    Adress:
    Povarovo, Russia
    Country:
    Location on map:
    baev
    Ну перенеси.. просто решил добавить в процессе - чтоб под рукой было.
    Пора уже создать отдельный форум - для подобных вещей
     
  4. baev

    baev ‹°°¬• Команда форума

    Сообщения:
    3.421
    Adress:
    Moskva, Russia
    Country:
    Location on map:
    Так есть же «ИЗБРАННОЕ».

    Вот туда и перенесу.