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

動機

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

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

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

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

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

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

  1. 作業内容が失われないようにローカルの変更が中央ブランチにコミット されたことを確認します
  2. 取り組みたい新しいリモートブランチのURLを渡して bind コマンドを使います
  3. revert コマンドの後に続いて update コマンドを使用して望むブランチの コピーをチェックアウトします

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

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 を使うことで)リモートのブランチにバインドされたものでも可能です。