以前使おうと思って挫折したSVNです。
最近ようやくでかいプログラムを組むようになったので、コードのメンテナンス性を高めるためにSVNを使い始めました。別にGUIなくてもいいんだけど、Windowsで使えるのがTortoiseSVNとからしいので、それをDLして使った。
インスコは超簡単。何も迷うことなく完了。
あとは使い方というか、バージョン管理システムの思想に慣れるのの慣れかなと思われます。まあ今のところはローカルで使ってるだけだし、別に何難しいことしようとしてる訳でもないのです。WebDAVとか、Tracとかと使おうとか、別に考えてねっす。
やることはといえば、
- レポジトリをどっかに作成
- レポジトリにソース達を登録(import)
- 自分用の作業ディレクトリにプログラムをレポジトリから引っ張って来る(checkout)
- 適当に編集(この部分が通常の「プログラミング」に相当する)
- 作業が一段落したらレポジトリにぶん投げて、保存(commit)
- 工程が一段落したらtagを作ってみる
とか。
あとはdiffをとるなり、branch作るなり適当にしてくれと。
取り敢えずは基本的な使い方を覚えたのです。そしてやっぱこういのはテキストベースの方が操作が楽な気がする。マウス沢山使うのって実はしんどいです。僕の場合は。
以下、最低限の使いかた。
レポジトリを設定する
最初にSVNを入れる訳ですが、これは沢山導入があるので、それを使えば良かろうと思います。Linuxならソースからmakeするのも、aptなり、yumなり、その辺から引っ張って来るも良しです。WindowsならTortoise SVNとかDLしてインスコすればおkですかね。日本語パッチもあります。この辺はGoogle大先生に聞けば教えてくれそう。
で、最初にローカルで使うことを前提として、あるディレクトリをレポジトリに使うことを決意します。Windowsのは今ひとつ慣れないので、/repositoryとかいうのをレポジトリにするとでも考えますか。ここでレポジトリというのはデータを保存したり、ログとったり、そういうことをするためのディレクトリです。これと自分の作業するディレクトリは別。みんなで同じソースを弄るときは、レポジトリにまとめたソースを於いておいて、自分とか、その他の人はそのレポジトリからデータを引っ張って来て、ローカルで作業。
ので、ここではそのレポジトリの設定。TortoiseSVNではエクスプローラでレポジトリにすると決めたディレクトリの上で右クリックどっか探せば、ある。そうするとエクスプローラ上にいくつかできます。dbとか、confとか、まあ設定ファイルとか、DB用のディレクトリですな。
んと、レポジトリにはSVNで管理するものの他にも色々入れたりすることとか、その他のプロジェクトのソースも入れることとか、ブランチ作ったりするのも考えて、
/ -------- repository --- svnroot --- hoge --- trunk |- branches +- tags
とかにするのがいいらしいです。
Linuxの場合は、
/repository/ root # mkdir svnroot; mkdir svnroot /repository/svnroot/ root # svnadmin create /repository/svnroot/hoge
みたいな感じです。この辺は以前一度やったことがあるので、なんとなく覚えてる。
インポート
そしてレポジトリにプロジェクトの中身をぶち込みます。
例えば、/home/S-ili/program/fugaというディレクトリの中に、piyo1.c、piyo2.cとかいうソースがあったとして、今後これらを管理したときには、こいつらをレポジトリに登録します。
ので、Tortoise SVNではfugaフォルダを右クリックして、インポート。んで、レポジトリのURLは、
file:///repository/svnroot/hoge
にします。んと、ローカルのときは///なのです。色々とあるので、この辺は調べると良いです。きっと。んと、あれだ、file://だったり、http://だったり、https://だったり、ssh+SVN://だったりする。まあこれもプロトコールの違い。
そして、これもLinuxでは、
/home/S-ili/fuga root # svn import ~ /repository/svnroot/hoge
とか、
# svn import /home/S-ili/fuga /repository/svnroot/hoge
みたいの。
意味するところは、「レポジトリに管理したいデータをインポート」することで、していることはレポジトリへ管理したいデータを登録していること。どうやらSVNなり、CVSなりで使うコマンドは主語がレポジトリらしい。まあ当たり前なんだけど。
んで、これがver1なり、r1(resisoin 1)なりになります。
レポジトリからローカルへデータを引っ張って来る(checkout)
ここまででrootでやる仕事は終わり。これから先はSVNを使って開発をするときの日常的なルーチンです。ローカルへ最近更新されたデータを持って来て、編集。
で、これはchekoutと呼ばれる作業なようです。Tortoise SVNではやっぱ右クリックで行ける。Lunuxだと、作業ディレクトリで、
$ svn chekout ~ /repository/svnroot/hoge
でおk。これでレポジトリからデータがディレクトリ後と飛んできます。
あとは適当に編集します。
レポジトリへ更新分をもどす(commit)
んで、作業し終わったり、ある程度作業が進んだら、レポジトリの中に新しいバージョンをぶち込みます。これもfugaディレクトリを右クリックすればなにやらそれらしいのが出てきます。Linuxでは、
$ svn commit -m ~/fuga /repository/svnroot/hoge "Comments"
とかでできます。
このとき、この更新の内容をコメント部分に書いておくと後々分かりやすいです。
基本的に順調に作業してる間はこのchekoutとcommitだけで事足ります。SVNの使いどころは、どんな更新を下か忘れちゃったよぉ(><;)とか、もう今のバージョンは訳が分からないからいっそのこと前のバージョンに戻したいよぉ(><;)とかそういうときです。
この場合は差分をとったりしますが、これはっこれでまた別の話。というか、飽きたので今日はここまでで。