Вы должны установить
git
git-svn
Скопировано по этой ссылке http://john.albin.net/git/convert-subversion-to-git.
1. Получить список всех коммиттеров Subversion
Subversion просто перечисляет имя пользователя для каждого коммита. В коммитах Git гораздо больше данных, но в самом простом случае автору коммитов нужно указать имя и адрес электронной почты. По умолчанию инструмент git-svn просто перечислит имя пользователя SVN как в поле автора, так и в поле электронной почты. Но немного поработав, вы можете создать список всех пользователей SVN и их соответствующие имена и адреса электронной почты Git. Этот список может использоваться git-svn для преобразования простых имен пользователей svn в надлежащие коммиттеры Git.
Из корня вашей локальной проверки Subversion выполните эту команду:
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > authors-transform.txt
Это будет захватывать все сообщения журнала, извлекать имена пользователей, удалять любые дубликаты имен пользователей, сортировать имена пользователей и помещать их в файл «author-transform.txt». Теперь отредактируйте каждую строку в файле. Например, конвертировать:
jwilkins = jwilkins <jwilkins>
в это:
jwilkins = John Albin Wilkins <johnalbin@example.com>
2. Клонировать хранилище Subversion, используя git-svn
git svn clone [SVN repo URL] --no-metadata -A authors-transform.txt --stdlayout ~/temp
Это выполнит стандартное преобразование git-svn (используя файл author-transform.txt, созданный на шаге 1) и поместит репозиторий git в папку «~ / temp» внутри вашего домашнего каталога.
3. Конвертировать svn: игнорировать свойства в .gitignore
Если в вашем репозитории svn использовались свойства svn: ignore, вы можете легко преобразовать его в файл .gitignore, используя:
cd ~/temp
git svn show-ignore > .gitignore
git add .gitignore
git commit -m 'Convert svn:ignore properties to .gitignore.'
4. Переместить репозиторий в пустой репозиторий git
Сначала создайте пустой репозиторий и сделайте так, чтобы его ветвь по умолчанию соответствовала имени ветки svn «trunk».
git init --bare ~/new-bare.git
cd ~/new-bare.git
git symbolic-ref HEAD refs/heads/trunk
Затем поместите временный репозиторий в новый пустой репозиторий.
cd ~/temp
git remote add bare ~/new-bare.git
git config remote.bare.push 'refs/remotes/*:refs/heads/*'
git push bare
Теперь вы можете безопасно удалить ~ / temp репозиторий.
5. Переименуйте ветвь «ствол» в «мастер»
Ваша основная ветка разработки будет называться «trunk», что соответствует имени, которое было в Subversion. Вы хотите переименовать его в стандартную «основную» ветку Git, используя:
cd ~/new-bare.git
git branch -m trunk master
6. Очистить ветки и метки
git-svn превращает все теги Subversions в очень короткие ветви в Git в форме «теги / имя». Вы захотите преобразовать все эти ветви в фактические теги Git, используя:
cd ~/new-bare.git
git for-each-ref --format='%(refname)' refs/heads/tags |
cut -d / -f 4 |
while read ref
do
git tag "$ref" "refs/heads/tags/$ref";
git branch -D "tags/$ref";
done
Этот шаг потребует небольшого набора текста. :-) Но не волнуйтесь; ваша оболочка unix предоставит> вторичную подсказку для очень длинной команды, которая начинается с git for-each-ref.