Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

bzr initやらinit-repoやら

タグ: Bazaar

普段Subversionばかり使っている自分がBazaar 2.0.0のリポジトリやらブランチやらツリーやらチェックアウトやらの関係を理解するためのまとめ。
随時更新。

bzr init-repo repos

reposディレクトリに.bzr管理ディレクトリ(control directory)を作成し、reposディレクトリ以下を共用リポジトリ(shared repository)にする。
共用リポジトリの.bzrにはrepositoryディレクトリが作成され、共用リポジトリに作られたブランチのリビジョンはそこに格納される。

bzr init-repo --no-trees repos

作業ツリー(working tree)を持たない共用リポジトリを作成する。
作業ツリーとは、.bzr以外の、ユーザが直接編集するいわゆる作業コピーのことを指す。

この共用リポジトリに作られるブランチにはデフォルトで--no-treeオプションが付く。
主に集中型リポジトリを作成する際に使う。

bzr init trunk

trunkディレクトリに.bzrディレクトリを作成し、trunkディレクトリをブランチ(branch)にする。
ブランチは作成される場所によって呼び名とリビジョンの格納先が変わる。

共用リポジトリに作られたブランチはリポジトリブランチ(repository branch)となる。
リポジトリブランチの.bzrにはrepositoryディレクトリは作成されず、リビジョンは共用リポジトリの.bzr/repositoryディレクトリに格納される。

共用リポジトリ以外の場所に作られたブランチはスタンドアロンブランチ(standalone branch)となる。
スタンドアロンブランチの.bzrにはrepositoryディレクトリが作成され、リビジョンはそこに格納される。

ブランチはまた作業ツリーの有無でも呼び名が変わる。
ブランチが作業ツリーを持つことを明確にしたい場合、「ブランチ」ではなく「ツリー」と呼ぶ。
すなわち「作業ツリーを持つスタンドアロンブランチ」はスタンドアロンツリー(standalone tree)であり、「作業ツリーを持つリポジトリブランチ」はリポジトリツリー(repository tree)である。

bzr branch parent_branch my_branch

parent_branchブランチのコピーとしてmy_branchブランチを作成する。
他の分散型SCMで言うところのclone。
bzrのcloneコマンドは、2.0.0現在branchコマンドの単なるエイリアスとなっている。

このコマンドで作られるブランチもinitコマンドで作られるもの同様、共用リポジトリに作られればリポジトリブランチに、それ以外の場所に作られればスタンドアロンブランチになる。
my_branchparent_branchと同じ共用リポジトリに作られた場合、両ブランチ間で共用可能なリビジョンは共用されるため、Subversionでブランチを切るのと同程度のコスト感覚でブランチを作成できる。

bzr branch --stacked parent_branch stacked_branch

parent_branchブランチの上に「積み重ねるリビジョンのみを格納」するスタックブランチ(stacked branch)を作成する。
その役割上、スタックブランチは必ず独自のリポジトリを持つ。
共用リポジトリに作ってもリポジトリブランチにはならず、スタックブランチ独自のリポジトリにparent_branchブランチのリビジョンがコピーされることもない。
そのため、parent_branchブランチにアクセスできない状況では、stacked_branchブランチではコミットはおろかdiffを取ることもできない。
これは「diffやrevert程度はリポジトリにアクセスしなくても行える」Subversionの作業コピーよりも厳しい制約である。
その上、Bazaar 2.0.0ではこのブランチにコミットしようとすると

bzr: ERROR: Cannot commit from a lightweight checkout to a stacked branch. See https://bugs.launchpad.net/bzr/+bug/375013 for details.

という実態に即さないエラーメッセージが出てコミットできない。

bzr branch --no-tree parent_branch no_tree_branch

parent_branchブランチのコピーとして、作業ツリーを持たないno_tree_branchブランチを作成する。

bzr checkout trunk working

workingtrunkブランチのチェックアウト(checkout)を作成する。
チェックアウトは「コミットしたリビジョンが即座にブランチに伝搬される」という点でSubversionの作業コピーのようなものと言える。
ただしSubversionとは違い「ブランチの一部をチェックアウト」したり「チェックアウトした一部分のみを bzr update 」することはできない。

チェックアウトはスタンドアロンブランチと同じように「全てのリビジョンをコピーする」ため、過去のリビジョンを参照する際にもブランチへのアクセスを必要としない。
それどころか bzr unbindチェックアウトをブランチにbzr bindブランチをチェックアウトにすることもできる。
ゆえにチェックアウトは束縛されたブランチ(bound branch)とも呼ばれている(と、思う)。

bzr checkout --lightweight trunk working

workingtrunkブランチの軽量チェックアウト(lightweight checkout)を作成する。
軽量チェックアウトは通常のチェックアウト(heavyweight checkout――lightweightとの対比から)にスタックブランチの特性(リビジョンをコピーしない)を合わせたようなもので、より一層Subversionの作業コピーに近い。
が、やはりこれもスタックブランチ同様、ブランチにアクセスできないとコミットすることもdiffを取ることもできない。
通常のチェックアウトは bzr unbindbzr commit --local でブランチから一時的に切り離してチェックアウト自身にリビジョンを作成できるが、軽量チェックアウトではそれも不可能。

bzr checkout branch

checkoutコマンドは引数が1つ以下の場合、指定したブランチに作業ツリーを生成する。
つまり「ブランチをツリーにする」。

bzr update working_tree

作業ツリーの内容をブランチの最新に合わせて更新する。

参考:

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/224-57a03f6f
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。