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

スタックブランチとは？
-------------------------

スタックブランチ(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`` でまだブランチにない現在のブランチのリビジョンのみを格納します。

ローカルブランチがスタックブランチとして作成された場合、
``push`` するには ``--stacked`` オプションを使うことが可能で
*stacked-on* な位置が明確になります。例です::

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


スタックブランチの制限
----------------------

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

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

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