Git-svnでSubversionからGitに移行方法
Published on 2018/09/21
6 min read
In category
Git
はじめに
Subversion のリポジトリから commit ログを引き継いだ形で Git へ移行した際の手順です。 また本番環境での git への切替も含んでます。
注意点
一度、自分の手元の PC で作業用のディレクトリを作成して作業することをおすすめします。 間違ってもいきなり本番環境などでは作業しないように…。
SVN から Git への移行作業
標準的なリポジトリ構造なら下記コマンドの実行でスムーズに行きます。
一連の作業はgit svn
コマンドで作業していきます。
git svn clone -s --prefix=svn/ svn+ssh://svnserve@hogehoge.com/hoge
標準的な構成
trunk
branches/hoge
branches/hugahuga2
tags
リポジトリが変則的な場合
Subversion のリポジトリ構成が変則的な場合、git svn clone
(内部で行っている事)を手動で行うことで対応出来る。
git svn init
で初期化.git/config
を編集し、リポジトリ構成を明示しておくgit svn fetch
で取得
git svn init -s --prefix=svn/ svn+ssh://svnserve@hogehoge.com/hoge
/* .git/configを編集 */
vim .git/config
------------------------------------------------------
[svn-remote "svn"]
url = svn+ssh://svnserve@hogehoge.com/hoge
fetch = trunk:refs/remotes/svn/trunk
fetch = dev:refs/remotes/svn/dev //追記部分
branches = branches/*:refs/remotes/svn/*
tags = tags/*:refs/remotes/svn/tags/*
------------------------------------------------------
git svn fetch
ブランチの確認
git branch -a
remotes/svn/dev
remotes/svn/trunk
ブランチを作る
git checkout -b svn/trunk
git checkout -b develop svn/dev
除外ファイル
git svn show-ignore >> .gitignore
予め用意しておいた空のリモートリポジトリを追加&push
git remote add origin ssh://git@hogehoge.com/hoge
git push -u origin --all
既存のディレクトリへの反映
さて、無事 VCS を Git に移行出来たら、開発環境や本番環境も Git に変更しましょう。
git init
git remote add origin ssh://git@hogehoge.com/hoge
git checkout -b svn-to-git
git fetch origin
git checkout origin/master -- .gitignore //監視除外の為リモートから取得する。
git reset --hard origin/master
リモートをブランチをローカルに作成
git checkout -b master origin/master
git checkout -b develop origin/develop
仮に作ったブランチを削除
git branch -d svn-to-git
SVN使わないから削除
rm -rf .svn
SVNのバージョンが古い場合各ディレクトリに.svnが存在するので下記で対応
find . -name .svn | xargs rm -rf