はじめに
Subversionを使いこなせていますか?自由度の高いSubversionは、慣例に従うことも多く、慣例を理解してうまくリポジトリを構築する必要があります。「trunk」「branches」「tags」もその中のひとつです。作ったばかりのリポジトリはまっさらなので、まずはこの3つを作成するとよいでしょう。
この記事では、解説と合わせて、チュートリアル形式で「trunk」「branches」「tags」の作成を行っていきます。ぜひあなたも一緒にやってみてください。
trunkの使い方
trunk(トランク)は、開発の中心(メインライン)となるディレクトリで、ほとんどのファイルをここに格納します。通常は開発中の最新バージョンを格納しておきます。Gitでいう、masterブランチのようなものですね。後述するbranchesのひとつと考えることもできます。最低限トランクさえあれば開発を進めていくことができますので、初心者の方はまずここからはじめてみましょう。
trunkを作ってみよう
Subversionのインストール
まだSubversionをインストールしていない方は、下記の公式サイトから、各プラットフォーム用のバイナリバッケージをダウンロードして、インストールしておいてください。
新しいリポジトリの作成
それでは、はじめに新しいリポジトリを作成しましょう。それには、コマンドプロンプト(コンソール)から、次のコマンドを入力します。ここでは、リポジトリ名を「tuto-repo」としています。なお、カレントディレクトリは適宜任意のディレクトリに移動しておいてください。
svnadmin create tuto-repo
コマンドを実行すると、新しいリポジトリが作成されます。まだ中身はなにもありません。
trunkの作成
次に、このリポジトリの中にtrunkディレクトリを作ってみましょう。次のコマンドを使って、ディレクトリの作成とコミットを同時に行います。なお、リポジトリのパスは適宜読み替えてください。形式が一般的なパス表記と異なっていることに注意が必要です。
svn mkdir file:///C:/Users/Test/Desktop/tuto-repo/trunk -m trunkの作成
trunkのチェックアウト
それでは、今しがた作成したtrunkにコミットしてみましょう。そのためには、まず作業コピーをチェックアウトする必要があります。「work」という名前の新しいディレクトリを作成して、そこに作業コピーをチェックアウトしましょう。
mkdir work
cd work
svn checkout file:///C:/Users/Test/Desktop/tuto-repo/trunk
これで作業コピーのチェックアウトができました。「work」ディレクトリを確認すると、次のように空の「trunk」ディレクトリ(.svn隠しディレクトリはあります)が作られていますね。
trunkへのコミット
次に、下記の内容の「example.txt」を「trunk」ディレクトリ内に作成してください。
hogehoge
fugafuga
ファイルを保存したら、次のコマンドを使ってファイルをコミットしましょう。
cd trunk
svn add example.txt
svn commit -m はじめてのコミット
これでうまくコミットできましたね。このように、コミットを重ねていくことで開発を進めていきます。次は、このリポジトリに「branches」を作ってみましょう。
branchesの使い方
branches(ブランチ)は、トランクから分岐した別のツリーです。ブランチ(枝)という名前は、トランク(幹)から枝分かれすることからきています。トランクとは別に開発を進めたいときに、トランクからブランチを作ります。ブランチを作るということは、トランクディレクトリをブランチとして、「branches」ディレクトリ内にコピーすることです。別々のディレクトリとして存在しますので、もちろん履歴も別々のリビジョンを持つことになります。
branchesを作ってみよう
branchesの作成
はじめに、trunkと同様のコマンドを使って、branchesディレクトリを作ってみましょう。コミットも同時に行います。
svn mkdir file:///C:/Users/Test/Desktop/tuto-repo/branches -m branchesの作成
新しいブランチを作る
それでは、ディレクトリもできたことなので、トランクから新しいブランチを作ってみましょう。ちょっと長いコマンドになるので、コマンドの引数に誤りがないかよく確認してから実行してください。ここでは、ブランチ名を「new-branch」としています。
svn copy file:///C:/Users/Test/Desktop/tuto-repo/trunk file:///C:/Users/Test/Desktop/tuto-repo/branches/new-branch -m 新しいブランチの作成
このコマンドでなにが起こったかというと、現在の「trunk」ディレクトリが、「new-branch」として「branches」ディレクトリにコピーされ、コミットされました。これがブランチを作成するということです。うまく作成できているか、ブランチをチェックアウトして確認しましょう。
cd ..
svn checkout file:///C:/Users/Test/Desktop/tuto-repo/branches
コマンドを実行したら、「work」ディレクトリを確認してみましょう。「branches」ディレクトリの中に「new-branch」ディレクトリが作られていますね。内容も「trunk」ディレクトリと同じになっています。
後はトランクと同じように、ファイルを追加したり、ファイルに変更を加えたりして、コミットすることができます。もちろん、その変更はブランチに対して行われるため、トランクには影響しません。うまくトランクとブランチを使い分けていきましょう。次に、類似の概念である「tags」について解説していきます。
tagsを作ってみよう
tagsの作成
こちらもbranches同様、まずはディレクトリを作成しなければいけません。お馴染みのコマンドを使って、ディレクトリの作成とコミットを行いましょう。
svn mkdir file:///C:/Users/Test/Desktop/tuto-repo/tags -m tagsの作成
新しいタグを作る
それでは、トランクから新しいタグを作ってみましょう。ブランチ同様、先ほどの長いコマンドを使用します。間違えないように注意してください。ここでは、タグ名を「version-1.0」としています。
svn copy file:///C:/Users/Test/Desktop/tuto-repo/trunk file:///C:/Users/Test/Desktop/tuto-repo/tags/version-1.0 -m 新しいタグの作成
このコマンドでも、ブランチの時と同じことが起こります。現在の「trunk」ディレクトリが「version-1.0」ディレクトリとして、「tags」ディレクトリにコピーされ、コミットされました。うまくいっているか、タグをチェックアウトして確認してみましょう。
svn checkout file:///C:/Users/Test/Desktop/tuto-repo/tags
「work」ディレクトリを確認すると、「tags」ディレクトリの中に「version-1.0」ディレクトリが作成され、「trunk」ディレクトリの内容がコピーされていますね。
すでにお気づきかもしれませんが、ブランチを作成する流れとタグを作成する流れは、対象とするディレクトリが違うだけで、それ以外は同じです。なぜかというと、ブランチとタグ(およびトランク)はSubversionにとっては概念にすぎず、なんら特別なものではないからです。あくまで慣例として、ブランチとタグが定義されているだけで、内部的には違いはありません。
そのため、ユーザー側がしっかりと役割を理解して使い分ける必要があります。ブランチはトランクとは別の作業をするディレクトリ、タグはある時点のトランクを保管しておくためのディレクトリと覚えておきましょう。間違ってもタグに対してコミットしてはいけません。リポジトリフックというものを使って、タグに対するコミットを防ぐ方法もあります。とはいえ、少人数で使う場合には、全員に周知するだけでも問題ないでしょう。
まとめ
「trunk」「branches」「tags」は、Subversionの基本となるものです。使い方をしっかりと覚えておきましょう。Subversionでは、リポジトリをどう使うかはユーザーに委ねられています。自由に操作できることは確かですが、慣例となっているベストプラクティスに従うことで、よりよいリポジトリになっていくことでしょう。
参考資料
社内サーバにリモートリポジトリを作るのも一つですが、「開発にまつわる面倒事」をこの際全部、tracpath(トラックパス)に任せてみませんか?
バージョン管理サービス・プロジェクト管理サービスの「tracpath(トラックパス)」では、
ユーザー5名、リポジトリ数3つまで、無料で利用可能です。
さっそく実務でも使って見ましょう。
自らも開発を行う会社が作ったからこそ、開発チームの「作る情熱」を支える、やるべきことに集中出来るサービスになっています。
エンタープライズ利用が前提のASPサービスなので、セキュリティも強固です。