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

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 -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
  echo "${author} = NAME <EMAIL>";
done
Результат работы скрипта сохраняем куда-нибудь в ~/svn-authors,
не забывая заполнить реальные адреса.
admin = Papa <[email protected]>

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://[email protected]/srv/git/project_dev.git
git push -u origin master
P.S. Есть еще способ через clone но он у меня не сработал (видимо из-за больших файлов в svn )
PHP:
git svn clone -s --authors-file=~//svn-authors http://code.yoursite.net/svn/trunk/
 

baev

‹°°¬•
Команда форума
admin, Вы действительно считаете, что это — «теория программирования»?
 

confguru

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

baev

‹°°¬•
Команда форума
Так есть же «ИЗБРАННОЕ».

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