Subversion から Git への移行作業
概要
SubversionからGitへ移行するための環境構築を完了させていることを前提とします。
移行作業はSVN から Git への移行 | アトラシアンの通り、 Prepare, Convert, Synchronize, Share, Migrate と手順に沿って行います。
ハマり所
-
svn から Git へのソースコード同期は誰かのローカルPC1台でしかできない
他のローカルからプッシュすると、 Git リポジトリが壊れる -
git svn clone
の際に、以下が空ファイルだと途中で処理落ちする
--authors-file=authors.txt
の中身は記載必須となる - branches, tags を独自ルールにしている場合はキチンと相関する必要がある
Tips
-
author
一覧取得
$ svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt
-
svn:ignore
一覧取得
$ svn propget -R svn:ignore
svn から Git への移行期間中にやること
移行期間中は、 svn と同期する為に( svn にコミットがあれば)定期的に下記実行する必要があります。
$ git svn fetch
$ java -Dfile.encoding=utf-8 -jar ~/svn-migration-scripts.jar sync-rebase
$ git push -u origin --all
※svn コミットのデータを取得して、 Git リポジトリに同期しています。
svn と Git の同時稼働方法
下記のように、移行元 svn に存在しないブランチに対しては、 Git からもプッシュできます。
それを利用して、 svn と Git の両方を稼働させることもできます。
- svn で管理している環境を、上記手順で Git 対応する
master ブランチにデータができる -
.svn
ディレクトリはそのまま置いておく - Git で別のブランチを作成
このブランチ内ではコミットとかプッシュしても問題ない - svn の修正は上記手順で master ブランチに取り込む
- master ブランチから 3 のブランチへマージ
ただし、 svn から Git の同期はローカルPC1台でしか対応できないので、早く Git 乗り換えることをお勧めします。
備考
- Share の項目で、公開リポジトリを Bitbucket を使用するフローになりますが、 GitHub などのリポジトリでも全く問題ありません。
- 他参考サイト
8.2 Gitとその他のシステムの連携 - Git への移行