Simple, Slowly

ブログを引っ越ししました。http://48.jp

SvnからGitに移行するときに苦労してるところや知っておくと便利なTipsを紹介します

ここ最近、svnで管理されているソースをGitに移行するということを時間を見つけてはやっています。

svnでは以下の問題がありました。

  1. svnパーミッションエラーでコミットができない
  2. svnの操作を忘れており、使うとき不安な気持ちになる
  3. githubのプルリクエスト機能を使いたい

まずは、git svn cloneでsvnからコードをcloneします。
それをあらかじめ作成してあるGitのレポジトリにpushします。

これだけで終われば簡単なのですが、プロダクションとsvnのコードを比較すると、差分が現れます。
きちんとした運用であれば差分はでないのですが、プロダクション環境へのデプロイが自動化されていないことや、svnをソースのバックアップとして運用していたという歴史的な経緯で差分が発生していました。
この差分をマージしないとまずいので、プロダクションのコードを正として差分をマージします。

このときに知っておくと作業がはかどるTipsを紹介します。

不要なファイルは削除する

比較する前にOSが自動で生成するファイル等があると邪魔になるので、先に消しておきます。

find . -name "._*" -exec rm {} \;
find . -name ".DS_STORE" -exec rm {} \;

colordiff

diffをcolorつきで表示してくれるので、見やすくなります。

インストール方法
brewでinstall。
shellにaliasを設定します。
alias diff="colordiff"

diffの便利なオプション

-r 対象ファイルを再帰的にたどる
-w スペースの違いを無視する
-q ファイル名のみ表示
-u 差分の前後の行を表示
---exclude 指定された対象を除外する

再帰的に差分のあるファイル名だけ知りたい場合
diff -rwq dir1 dir2

.svnディレクトリと.DS_STOREを無視したい場合
diff -rwq --exclude=".svn" --exclude=".DS_STORE" dir1 dir2

GUIで差分をみる

GUIで見たい場合は、DiffMerge(Mac)とWinMerge(Windows)があります。
DiffMerge(Mac)
http://sourcegear.com/diffmerge/

WinMerge(Windows)
http://www.geocities.co.jp/SiliconValley-SanJose/8165/winmerge.html

おわりに

いくつか便利なTipsを紹介しましたが、差分の比較をやりやすくすることしかできないので、 最後は気合いでやるしかないです。

根気は必要ですが、Gitのほうがコマンドが使いやすいですし、Githubでプルリクエストが使えるようになるので、メリットも大きいと思います。