Skip to content

git svn

andyceo edited this page Oct 23, 2014 · 1 revision

Полезные ссылки про git svn

Использование

Основной и самый просто синтаксис выглядит так:

#!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-репозитория в git

Предположим, что адрес 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 <andyceo@yandex.ru>
arthurion = arthurion <arthur.html@gmail.com>
Андрей = andyceo <andyceo@yandex.ru>
Андреев = andyceo <andyceo@yandex.ru>
Андрей Андреев = andyceo <andyceo@yandex.ru>

Затем можно запустить такой скрипт:

#!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://git@bitbucket.org/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-репозиторий.

Sidebar is under construction

Clone this wiki locally