Git-svnでSubversionから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

参考情報

https://qiita.com/karumado/items/49b80805ff8dd2c7c17a からの転記
Written with StackEdit.