gitで管理しているソースをsvnに入れる

自分の開発はgitで行っているけど、お客様のレポジトリがsvnというケースが少なからずあります(私の場合)

gitからcloneしてsvnにimportするまでの手順は、実行頻度が少なくていつもてこずるのでここにメモします。

以下の例はCakePHP3での例ですが、ignore周り以外は流用できます:

まず、gitからcloneする

cd /var/www/html
git clone https://xxxx ./app

次にsvnに登録したくないファイルを削除する

git cloneした直後なのでリポジトリ管理したくないファイルは存在しないと思ったのですが.gitの中とかは管理対象外にしたいですよね。よってこのステップを実施します。なぜ先に削除するかというと、svnに登録したファイルを後からsvn管理外にするのは面倒だからです。

cd /var/www/html/app
rm -f tmp/*
rm -f tmp/cache/models/*
rm -f tmp/cache/persistent/*
rm -f tmp/cache/views/*
rm -f tmp/sessions/*
rm -f tmp/tests/*
rm -f logs/*
rm -rf vendor/*
rm -rf ./.git
rm -rf ./.github

ローカルのソースをsvnにimportする

cd /var/www/html/app
svn import . svn://リポジトリのURL -m "initial import"

次に、ローカルのソースを退避する

不便なんですが、importしただけでは手元のソースがワーキングコピーになりません。

cd /var/www/html
mv app app_bak

リポジトリからワーキングコピーを作る

cd /var/www/html
svn co svn://リポジトリのURL ./app

ignoreを行う

gitは.gitignoreがあり、便利ですが、svnの場合はプロパティの設定でignoreします:

cd /var/www/html/app
svn propset svn:ignore "*" tmp
svn propset svn:ignore "*" tmp/cache/models
svn propset svn:ignore "*" tmp/cache/persistent
svn propset svn:ignore "*" tmp/cache/views
svn propset svn:ignore "*" logs
svn propset svn:ignore "*" vendor
svn status

ignoreした結果をコミットする

svn commit -m "apply ignore properties"

以上です