スタックブランチを利用する

ユースケース

あるプロジェクトで作業しようとしていて、公開されているリポジトリに対して 読み込みアクセスはできるものの書き込みができないとしましょう。 公開されているリポジトリと同じホストで自分のブランチを公開したりバックアップ したりする場合、スタックブランチを使うことができるかもしれません。

スタックブランチの他のユースケースとしては、実験的なブランチと、コード ホスティングサイトが挙げられます。これらのシナリオではスタックブランチの 特性がぴったりあいます。

スタックブランチとは?

スタックブランチ(stacked branch)は別の(スタック先)ブランチのリビジョンを 見つける方法を知っています。 スタックブランチはスタック先ブランチには存在しないユニークなリビジョンのみを 保存することで、ブランチの作成を高速にしたり、ディスク利用効率を向上します。 これらの観点から、スタックブランチは共用リポジトリと似ています。 しかしながら、スタックブランチは追加の利点があります:

  • 新しいブランチはスタックされたブランチとは完全に異なる位置に設置できます。
  • スタックブランチを削除すれば(共用リポジトリだと残ってしまう) リビジョンの情報も削除されます
  • セキュリティは共用リポジトリよりも向上しています。 スタック先のリポジトリはスタックブランチにコミットする開発者に対して 物理的にリードオンリーだからです。

スタックブランチを作成する

スタックブランチを作成するには、branchコマンドの stacked オプションを使用します。 例です:

bzr branch --stacked source-url my-dir

このコマンドによって my-dir がローカルリビジョンなしのスタックブランチとして作成されます。 定義されると、 source-url に関連づけされた公開ブランチは スタックドオン(stacked on) の位置として使われます。 さもなければ、 source-urlスタックドオン の位置になります。

スタックチェックアウトを作成する

スタックチェックアウトを直接作成する機能はまもなくサポートされる予定です。 それまでの間、2段階の処理が必要です:

  1. 上記で示されたようにスタックブランチを作成する。
  2. reconfigure もしくは bind コマンドのどちらかを利用して ブランチをチェックアウトに変換する。

スタックブランチをプッシュする

多くのプロジェクトの大部分の変更は 開発トランク or 現在の安定 ブランチといった既存のブランチを基礎としています。 これらの1つにスタックされた新しいブランチの作成は push コマンドを利用して 次のように簡単にできます:

bzr push --stacked-on reference-url my-url

このコマンドでは、 reference-url にスタックした新しいブランチを my-url に作成し、 reference-url には無いリビジョンだけをそこに格納します。 my-urlreference-url と同じホストでも構いません。

ローカルブランチがスタックブランチとして作成された場合、 push するには --stacked オプションを使うことが可能で スタック先の位置を省略できます。:

bzr branch --stacked source-url my-dir
cd my-dir
(hack, hack, hack)
bzr commit -m "fix bug"
bzr push --stacked

この使い方は、上述したユースケースにマッチしています。

スタックブランチの制限

スタックブランチに関して覚えておくべき大事なことは、ほとんど全てのオペレーションでスタック先ブランチが必要になることです。 これは両方のブランチがローカルもしくは同じサーバーにあるときは問題にはなりません。

また、ほとんどの履歴がスタック先リポジトリに格納されているので、スタック先 リポジトリへのアクセスがネットワーク経由だった場合に bzr log のようなコマンドが遅くなるかもしれません。

スタックするブランチを変更する

bzr reconfigure コマンドを使ってスタックドオンブランチを変更したりスタックするのをやめたりすることができます。 bzr reconfigure --unstacked を実行した場合、bzrは全ての参照されているデータをスタックドオンブランチからスタックされていたブランチにコピーしてくることに注意してください。 大きなレポジトリにおいては、これは時間がかかったりリポジトリサイズを増大させたりします。