今さらTortoiseSVN メモ〜誰にもきけなかった

タグやブランチをちゃんと管理しようと思った場合は、インポートするトップフォルダtopの中の構成を、

  • top/
    • trunk/
    • branches/
    • tags/

と3つに分けて、これのtrunk/(幹)の中に、初期の全ソースセットを入れた状態で、topフォルダを初回インポートする、というのがどうやら慣例的となっているようです。TortoiseSVN自体の機能ではなく、ブランチとか使う場合は、みんなこう使っている的な事項なので全く世の中油断できないものです。(記:というか、こちらの「リポジトリレイアウト」にちゃんと説明されてました。推奨の使い方という位置づけで。)以降、メインブランチに対して作業する場合は、trunkの中のものをcheckoutしたり、commitしたりして、作業します。
ここで気を抜けないのは、上記trunk, branches, tagsとフォルダは同じ階層に並列して並んでますが、SVNの中で管理されている構造は違います。あくまでtrunkが大本のでっかい幹です。根っこから最新バージョンの頂上にまですっと、堂々存在しているあの「幹」です。で、その幹の途中から枝分かれして、さらに順次枝分かれしていくものを、brances/や tags/ の下に入れましょう、という話なわけです。
で、ブランチをきりたい場合は、これが大事なのですが、trunk のフォルダを選択した状態で、右クリックし、Branch/Tag.. を選択し、ブランチを入れたいリポジトリのURLを修正します。ここのURL修正なのですが、branchなら、インポート時に作成しておいた上記branches/の下に、好きなブランチ名を記述し、それを新しいURLとします。
例)URL:.../branches/branch_VER1(branch_VER1を新規に作成したい場合)
このようにしておくと、trunkを右クリックして、RevisionGraphを選択すると、大本の本流trunkから、ブランチがどのように派生したのかをグラフとしてみることが出来るようになります。使い方としては、trunk/ の下のみをチェックアウトしたり、branchesの下の、目的のバージョンのみをチェックアウトしたりして使います。
このようにたくさんのブランチやバージョンがあっても、 実際のSVNリポジトリDBの中では、ソース情報は非常にコンパクトに管理されているようです。 しかし、top全体を取って来てしまうと、管理している全てのバージョンのソースコードセットを 文字通り全部展開してしまうわけですからタイヘンなことになります。topをまるごと チェックアウトするなど、やるものではありません。

とくにこれという目的もなくプログラムを作成している場合、ちょっとした冒険や、寄り道開発などをするのに、TortoiseSVNは専用サーバも必要としないし、とても強いパートナーです。たとえば今作っているプログラムが何にでも進化していける段階、そう、フレームワークにあたる部分を作った時点でブランチを切り、タイマーをつけてゲームにしたり、あるいはモデラーアプリにしたり、あるいは解析ビューアにしたり、本筋バージョンからちょっと冒険したい場合は、冒険用のブランチをさらに切ったり、、でちょっと汎用ガベージコレクションなんかが完成して「あれ、これはむしろベースにあった方がいい機能だな」って思ったら、trunkの方にそこのところだけマージしてみたり。。
ていうのは何もプログラムソースコードに限らず、記事や小説物語、脚本、ゲームのシナリオ、翻訳、、などなどを執筆していて、話のいろいろな展開、バリエーションを用意してみたりなど、要はテキストベースなら何でも履歴つき文書管理ができるわけですね。(とはいってもホントにそんな使い方してる人見たことないけどね)