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

Европа - быстрые серверы на дисках NVMe от $5 / Русский датацентр от 199руб

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

  1. confguru

    confguru ExAdmin Команда форума

    Задача: смигрировать 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.420
    Ваш город:
    Mytishchi, Russia
    Address:
    Mytishchi, Russia
    Country:
    Location on Map:
    admin, Вы действительно считаете, что это — «теория программирования»?
     
  3. confguru

    confguru ExAdmin Команда форума

    baev
    Ну перенеси.. просто решил добавить в процессе - чтоб под рукой было.
    Пора уже создать отдельный форум - для подобных вещей
     
  4. baev

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

    Сообщения:
    3.420
    Ваш город:
    Mytishchi, Russia
    Address:
    Mytishchi, Russia
    Country:
    Location on Map:
    Так есть же «ИЗБРАННОЕ».

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