STEAM PLACE

エンジニアリングとマネジメント

SubversionからGitへ移行 - 移行作業編

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 の両方を稼働させることもできます。

  1. svn で管理している環境を、上記手順で Git 対応する
    master ブランチにデータができる
  2. .svn ディレクトリはそのまま置いておく
  3. Git で別のブランチを作成
    このブランチ内ではコミットとかプッシュしても問題ない
  4. svn の修正は上記手順で master ブランチに取り込む
  5. master ブランチから 3 のブランチへマージ

ただし、 svn から Git の同期はローカルPC1台でしか対応できないので、早く Git 乗り換えることをお勧めします。

 備考