git svn - andyceo/documentation GitHub Wiki
- http://leonid.shevtsov.me/ru/perenos-svn-repozitariya-v-git
- http://blog.yetanother.ru/2010/02/subversion-git.html
- http://www.jukie.net/bart/blog/svn-branches-in-git
- http://www.dmo.ca/blog/20070608113513/
- http://linsovet.com/git-svn-sync-changes
Основной и самый просто синтаксис выглядит так:
#!bash
git svn clone SVN_REPOSITORY_TRUNK_ADDRESS
Для добавления ветки, редактируем файл .git/config
:
#!text
[svn-remote "svn34"]
url = svn+ssh://your-server/home/svn/project-name/branches/3.4.x
fetch = :refs/remotes/git-svn-3.4
Вытянем эту ветку:
#!bash
git-svn fetch svn34 -r MMMM
Переключимся на эту удаленную ветку:
#!bash
git checkout git-svn-3.4
Создадим локальную ветку и свяжем ее с удаленной:
#!bash
git checkout -b master-3.4.x
Предположим, что адрес svn-репозитория следующий: svn.ruware.com
.
Сначала запустим скрипт, который выберет всех авторов в svn-репозитории: cat ~/bin/svn-authors
#!/usr/bin/env bash
authors=$(svn log -q svn://svn.ruware.com | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
for author in ${authors}; do
echo "${author} = NAME <EMAIL>";
done
Можно запустить так: svn-authors > svn_authors.txt
. Тогда вместо вывода на экран скрипт сохранит авторов в файл. Имейте в виду, что иногда скрипт работает неправильно и пользователя с именем "Андрей Андреев" представляет как двоих пользователей "Андрей" и "Андреев".
После создания файла с авторами, его нужно подредактировать, указав соответствующих авторов git. Файл может выглядеть примерно так:
#!text
andyceo = andyceo <[email protected]>
arthurion = arthurion <[email protected]>
Андрей = andyceo <[email protected]>
Андреев = andyceo <[email protected]>
Андрей Андреев = andyceo <[email protected]>
Затем можно запустить такой скрипт:
#!bash
# set project name
project=smtrsprint
trunk=/drupal6/modules/andyceo/smtrsprint
gitfolder=git-repositories
svnaddress=svn://svn.ruware.com
authorsfile=svn-author
svn list $svnaddress$trunk
git svn clone --authors-file=$authorsfile --follow-parent --trunk=$trunk $svnaddress $gitfolder/$project
cd $gitfolder/$project
git remote add origin ssh://[email protected]/andyceo/$project.git
git checkout -b 6.x-1.x
git push -u origin 6.x-1.x
svn delete $svnaddress$trunk
Примечание: если есть ветки, которые надо импортировать, то для этого есть ключ у команды git svn clone --branches=/branches
. Внутри папки /branches
(которая в svn-репозитории) должны быть те svn-ветки, которые нужно перенести в git-репозиторий.