bzrを使い始める前に知っておきたかったこと
bzrを使い始める前に知っておきたかったこと
バージョン管理システムにbzrを使っていて「これを始めに知っておけばもう少し楽に学べたのに・・・」と思うことを書こうと思います。
bzrはGitなどに比べて情報量も少ないですし、とくに日本語の情報は少ないので慣れるまでにかなりの時間がかかるのではないかと思います。
実際、自分は慣れるまでにかなり時間がかかりましたし、まだなれていないことも多々あります。。。これからbzrを使い始める人の手助けに少しでもなれば。
できるだけ調べて書いていますが、もし間違っていることがあればお知らせください。
その1. bzrにはtrunkとかmasterの概念はない。すべてbranch。
ここが一番他のVCSと違うところなんじゃないかなと個人的には感じます。
他のバージョン管理システムにはtrunkとかmasterというメインとなるレポジトリがあって、それから派生したbranchという概念があると思いますが。bzrにはありません。すべてがbranchです。
メインで使っているものでも、バグフィックス用に作ったものでも、機能追加用のものでも、すべてbranchです。branch間の親子関係などを設定することはできますが、branchそのものがtrunkかどうかという情報はbzrのシステム上もっていません。
これが結構厄介で、特に自分がそうなのですが、あまりGitなどの他のバージョン管理システムを使ったことがない人は、メインで使っているトランクだろうが、自分のローカルにあるブランチだろうが、すべてbranchだという意識でいます。
なのですべてを「ブランチ」と呼んでいます。そうすると、他の人と会話をするときにいちいち訂正されたりします。
自分「じゃぁ、さっきの変更をメインのブランチにプッシュしておきますね、、、」
他人「え、あれ、マージする先はブランチじゃなくてトランクでしょ?」
自分「あ、すみません、そうですね、トランクですね。自分のブランチからトランクにプッシュしておきます。。。(bzrはブランチしかないんだけどなぁ。。。だからわざわざメインのブランチって言ってるんだけど。まぁでもトランクの方が短いし言いやすいから理にかなってるか。。。)」
なんでもかんでもブランチブランチという人がいたら、あぁこの人はbzrしか使ったことがないんだろうなと、優しい目で見てあげてください。。。
え、じゃぁ、どうやってtrunkを指定するの???
ここまで読んで疑問になるかと思います。では、どうやってtrunkだとわかるのか。
bzrにはtrunk機能はありませんので、どのbranchをtrunkとして扱うかを決めるのは人間の仕事です。
どこのディレクトリにあるbranchがtrunkなのか、bzrを使う人が決めなければいけません。運用上の決まりとして共通理解として開発者/運用者みんなが認識しておく必要があります。
その2. .bzr ディレクトリと branch は1対1の関係がある(基本的には)
ここも他のバージョン管理システムと大きく違うのではと思います。
bzrの基本的な考え方としては、あるディレクトリが1つのbranchを表します。もう少し正確には、あるディレクトリの中にある.bzrディレクトリにがあれば、そこにbranchがあります。
ディレクトリとbranchが1対1で紐づくので、ディレクトリ構成を見ればブランチの構成もわかるので楽かもしれません。
以下のようにディレクトリ構造でメインブランチとその他のブランチを分けている運用にしたときには、ディレクトリとbranchが1対1で紐づくということがわかっていればすんなり理解できます。自分はディレクトリ=branchの関係が最初わかっていなかったので、この構造の意味不明で苦労しました(笑)
shohei/test |-- .bzr ★ここがメインブランチ | `-- branches `-- test.new_feature `-- .bzr ★ここがその他のブランチの1つ
いやいや、こんなディレクトリ管理は面倒なんだけど、、、
見出しにも書いたとおり、「基本的には」ディレクトリとbranchが1対1での運用ができます。しかし、ディレクトリ管理はしたくないという方もいると思います。
そんな方には、colocated branchというのもあるようです。自分は使ったことはないのですが、colocated branchを使うことにより1つのディレクトリの中に複数のbranchを入れることができ、branch間を簡単にスイッチできるらしいです。
もし、そのような管理がしたいのであれば試してみると良いかもしれないですね。
その3. レポジトリがなくても良い
bzr explorerを使っていてbranchを作ろうとするときに聞かれるのが「レポジトリを作成しますか」という質問。
「え、だってbranch作るってことはレポジトリ作るってことでしょ??作らないことなんてできるの??」と、最初はこの質問の意味がわかりませんでしたw
bzrでの「レポジトリ」とは、「複数のbranchにまたがるファイル履歴を一箇所で管理する仕組み」で、これで何が嬉しいのかというと、レポジトリを作成するとストレージ量を抑えることができます。
たとえば、あるメインのbranchがあり、そこに同時並行で新しい機能を3つ追加する場合、機能A用branch、機能B用branch、機能C用branchを作ります。
そうすると、機能A、B、C用branchではほぼすべての履歴が同じになります。それを別々のbranchで管理すると、コピーが作成されるので単純にファイル容量が3倍とかになります。
代わりに、レポジトリを作成して、それぞれのbranchで管理するのではなくレポジトリー一箇所で管理をすれば、履歴は1つだけ管理すればよく、コピー分のファイル容量が減ります。
なので、同じ履歴をもつbranchを複数作るのであれば、レポジトリは作っておいたほうが良いです。
逆に言えば、branchを1つしか作らないのであれば、作っても作らなくても一緒だと思います。