#概要
svnを利用してローカル環境でバージョン管理したい。
gitならgit initするだけで済むのだけどsvnはとりあえずバージョン管理したいと思ってリポジトリつくってやろうとすると結構面倒くさいうえに情報が何故か殆ど無い。(一応いくらかあるけど...)
ここでは特に手っ取り早くsvnでバージョン管理できる状態に持ってく方法だけを解説する。
#流れ
- リポジトリ作成
- バージョン管理したいファイルをインポート
- [2]でインポートしたやつをチェックアウト
- 後はaddなりcommitなりstatusなりなんなり
gitを使ってると違和感あるんだけどsvnではチェックアウトしないとバージョン管理される状態にできない(これほんと?)。svn initなんてやっても.svnは作られない。
#リポジトリの作成
$svnadmin create repository
これでカレントディレクトリにrepositoryという名前のsvnリポジトリができる。
どこに作成しても良いけど今回はどうせテスト的なもので最後には削除するのだろうからカレントディレクトリに作ってしまおう。
#バージョン管理したいファイルをインポート
インポートというのはgitでいうところのgit add + git commit + git pushに近い。
リポジトリにディレクトリを突っ込む。この後チェックアウトするのに必要になる。
その前にバージョン管理したいファイルを作成する。とりあえずtrunkフォルダを作って適当にtouch testしておこう。
$mkdir trunk
$touch trunk/test
今作ったtrunkフォルダをsvn importコマンドでリポジトリに突っ込む。
ここで面倒くさいのがリポジトリのパスはURIで指定しなければならないので階層が深いところに作成するとパスの指定がだるすぎる(ようはリポジトリを相対パスで ./repository と指定できない)。
指定方法は[ file:///... ]でもいいし[ http://localhost/... ]でも良いけど前者の方がTabでディレクトリ名の補間が効くからおすすめ。
$svn import trunk file:///....../repository/trunk -m "適当にメッセージ書く"
うまくいけばこんな感じで結果が表示されるはず。
-m "add trunk"
Adding trunk/test
Committed revision 1.
#[2]でインポートしたやつをチェックアウト
今追加したやつをチェックアウトしなければいけない。2度でま。(何とかならない?)
とりあえず[2]で追加したtrunkフォルダは邪魔なので残念な気持ちになりながら削除しよう。
$rm -r -f trunk
んでチェックアウトする。ここでもsvnのパスがURIなので深い階層にリポジトリ置くと悔しい思いをする。
$svn checkout file:///....../repository/trunk
うまくいけばこんな感じで結果が表示されるはず。
A trunk/test
Checked out revision 1.
後はgitと同じような操作でいける。
#実際にaddとかcommitとかやってみる
# 適当にtrunk/aaaを編集.
$vi trunk/test
iaaa[ESC]:wq[Enter]
# svn statusで編集状態を確認.
$svn status trunk
M trunk/test
# svn commit で変更をコミット。gitと異なりadd -uは不要.
$svn commit trunk -m "change"
Sending trunk/test
Transmitting file data .
Committed revision 2.
# 変更が反映されたか確認する為に削除して再度チェックアウトしてtrunk/testを表示してみる
$rm -r -f trunk
$svn checkout file:///....../repository/trunk
$cat trunk/test
aaa