Задача: смигрировать svn-репозиторий в git без потери истории.
1) Устанавливаем git-svn
Например, на Ubuntu это делается так:
2) Собираем авторов коммитов (в SVN пользователи – это просто идентификаторы, а в git – email)
Выполняем такой вот скрипт в папке SVN-репозитария:
Результат работы скрипта сохраняем куда-нибудь в ~/svn-authors,
не забывая заполнить реальные адреса.
admin = Papa <[email protected]>
3) Выполняем в консоли
1-2 строки - создаём новый каталог для временного репозитория.
3 - инициализирует каталог как гибридный git-svn и указывает origin на исходный репозиторий.
4 - указываем карту комиттеров
5 - забираем содержимое
После некоторого ожидания можно проверить, что пользователи смапились корректно (git log). Затем нужно склонировать этот временный репозиторий (git clone) в новый "чистый", чтобы избавиться от svn-хвоста для поддержки git-svn. Вторая строка "забывает" временную папку откуда был взят проект. Третья привязывает к рассшареному репозиторию (не обязательно)
Загружаем на общий сервер разработки
P.S. Есть еще способ через clone но он у меня не сработал (видимо из-за больших файлов в svn )
1) Устанавливаем git-svn
Например, на Ubuntu это делается так:
PHP:
sudo apt-get install git-svn
Выполняем такой вот скрипт в папке 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
не забывая заполнить реальные адреса.
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
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
PHP:
git svn clone -s --authors-file=~//svn-authors http://code.yoursite.net/svn/trunk/