今更だけどbzr-coloの話をするよ(応用編)

昨日に引き続き、bzr-coloの話です。

「colo:」というプレフィックスをつけることで、Colocatedワークスペース内のブランチにアクセスできるのは昨日書いたとおりです。

例えばどんなことが出来るのか、いろいろやってみます。

colo: を使った操作の例

リモートブランチとの連携

新しいリモートブランチをワークスペースに取り込む

$ bzr branch url/to/another/remote/branch colo:origin/another-branch
# --bindで、チェックアウトとしてワークスペースに取り込むこともできます。
$ bzr branch url/to/another/remote/branch colo:origin/another-branch --bind
リモートから取り込んだブランチを最新化する(アップストリームでの変更を追いかける)
$ bzr pull -d colo:origin/trunk
# 最初に--bindを指定して取り込んでいるなら、かわりにupdateで
$ bzr update colo:origin/trunk
# ちなみに、colo-pullコマンドを使うと、"origin/"で始まるブランチをまとめて最新化することができます。
$ bzr colo-pull

ワークスペース内でのブランチ操作

アクティブなブランチ上で行った変更を別のブランチにも反映

$ bzr push colo:another-branch
別のブランチから変更をマージ
$ bzr merge colo:another-branch
rebaseなどの比較的ややこしい処理をする時に、事前にブランチをバックアップ
# --no-switchを指定した場合、新しいブランチを作るだけで、そのブランチへの切り替えはしません
$ bzr colo-branch backup --no-switch
$ bzr rebase colo:feature-foo

データの参照、比較

ブランチの履歴をGUIで比較

$ bzr qlog colo:origin/trunk colo:feature-foo
# colo: とだけ指定したら、ワークスペース内の全てのブランチが対象になります
$ bzr qlog colo:
※こんな感じになります

feature-fooブランチ上で変更された内容を差分として表示

$ bzr diff colo:feature-foo -r ancestor:colo:origin/trunk

いくつかの地雷について

ここまで書いてきて何ですが、実はいくつか地雷というか、気をつけるべきポイントがあります。

その1:ワークスペースを移動できない

内部的に、フルパスで管理している部分があり、ワークスペースを別の場所に移動したりフォルダ名を変えたりすると動かなくなります。
もし移動したい場合は、移動した後にcolo-fixupというコマンドを実行してください。それでまたちゃんと動くようになります。

$ bzr colo-fixup

その2:ブランチ名を変名できない

ブランチを変名するための colo-mv っていうコマンドがあるんですが、(少なくともWindowsでは)動きません。(Linuxでは未確認)

ブランチを変名したいときは、colo-branch でコピーしてから、 colo-pruneで古いほうを削除してください。

$ bzr colo-branch NEW_NAME --from-branch OLD_NAME
$ bzr colo-prune OLD_NAME

とりあえずこんな所かな。
書いてみたら全然応用編って感じじゃないですね・・・

明日はrevision specの話でも書こうかと思います。