チェックアウトを再利用する
===========================

動機
-----

時々、複数のブランチに取り組むために単独のチェックアウトを\
サンドボックスとして持つことは便利です。
挙げられる理由のいくつかは次の内容を含みます:

 * 作業ツリーが大きいときディスクスペースを節約する
 * 固定された位置で開発する

多くの場合、作業ツリーのディスクの利用量は ``.bzr`` ディレクトリよりも
大きくなります。
複数のブランチに取り組みたいが、それぞれの作業ツリーすべてのオーバーヘッドを\
許容できない場合、複数のブランチをまたがってチェックアウトを再利用することが\
うまくゆく方法です。

他の機会において、サンドボックスの位置は数多くの開発とテストツールに設定されます。
繰り返しますが、複数のブランチをまたがったチェックアウトの再利用は役に立ちます。


ブランチが結びつけられた場所を変更する
---------------------------------------

チェックアウトが結びつけられている場所を変更するためには、次の手順に従います:

 1. 作業内容が失われないようにローカルの変更が中央ブランチにコミット
    されたことを確認します

 2. 取り組みたい新しいリモートブランチのURLを渡して ``bind`` コマンドを使います

 3. ``revert`` コマンドの後に続いて ``update`` コマンドを使用して望むブランチの
    コピーをチェックアウトします

新しいブランチに bind して update するだけだと、コミットしたもの、していないもの\
両方のローカルの変更がマージされることに注意してください。
``revert`` か ``commit`` を使って、それらを維持するか破棄するかを決めなければ\
いけません。

bind+update レシピの代わりは ``switch`` コマンドを使うことです。これは基本的に、\
ツリーの中のコミットされていない変更がマージされること以外は、既存のブランチを\
除去して新しい位置で ``checkout`` を再び実行することと同じです。

注: 場合によってバインドされた異なるブランチの適切なキャッシュをチェックアウトするために
``switch`` はコミットされた変更を廃棄するので、ローカルにコミットされているが最も最近\
バインドされたブランチにまだコミットされていない変更が存在する場合意図的に失敗します。
これらの変更を本当に廃棄したいのであれば、 ``--force`` オプションを使います。


軽量型チェックアウトを切り替える
----------------------------------

軽量型チェックアウトでは、ローカルのコミットは存在せず、 ``switch`` は\
作業ツリーが関連づけられたブランチを効率よく選びます。
1つの可能なセットアップ方法は、ローカルツリーなしのリポジトリと軽量\
チェックアウトを組み合わせて使うことです。
これによって取り組むものを簡単に切り替えることができます。例です::

  bzr init-repo --no-trees PROJECT
  cd PROJECT
  bzr branch bzr+ssh://centralhost/srv/bzr/PROJECT/trunk
  bzr checkout --lightweight trunk my-sandbox
  cd my-sandbox
  (hack away)

この例のこの範囲でtrunk ``.bzr`` ディレクトリを持ちますがそこでの\
ブランチとしての作業ツリーはツリーなしのリポジトリで作られたことに\
注意してください。必要な数だけブランチを入手もしくは作成して必要に\
応じてそれらの間で切り替えることができます。例です::

  (my-sandboxの中にいることを前提とする)
  bzr branch bzr+ssh://centralhost/srv/bzr/PROJECT/PROJECT-1.0 ../PROJECT-1.0
  bzr switch ../PROJECT-1.0
  (fix bug in 1.0)
  bzr commit -m "blah, blah blah"
  bzr switch ../trunk
  (go back to working on the trunk)

注: ブランチはローカルのみのものでも、(``checkout`` で作るか ``branch``
でそれらを作った後で ``bind`` を使うことで)リモートのブランチにバインド\
されたものでも可能です。
