目次
Bazaar 分散バージョン管理システム
バージョン管理システム。開発が停滞しているなどで 2013年ごろから人気がなくなってきた印象。
pythonで実装されているがmercurialとはかなりインタフェースが異なる。
数字でリビジョン番号がつけられるところはsubversionに近い。
サブコマンドの説明を見るには bzr help サブコマンド
- launchpad.net は Bazaar のホスティングサービス。
- bzrtools に bzr patch が入っている。
- bzr shelve ページは分割しました。差分を棚上げする。
- bazaar_findbakfile ~1~ のようなファイルを検索・削除する。
資料
- http://bazaar.canonical.com/en/ (bazaar-vcs.orgから転送されるサイト)
- 英語版クイックリファレンス PDFなど
- http://gigo-ice.org/scm/bazaar/wiki/tutorial.ja.html Bazaar Tutorial 日本語訳
-
- 「bzrは色々な使い方に対応できるようにしようとしてリポジトリとブランチと作業ツリーを分離して設計している」
-
- Subversion的な使い方がデフォルト。Git/Mercurial的な使い方はオプション。
- BzrPipeline プラグイン
Win32で使う
http://wiki.bazaar.canonical.com/WindowsDownloads
bzr-2.4.2-1-setup.exe が利用可能(2011年11月現在)
インストール先を c:\usr\Bazaar にして、launchpad.net プラグイン以外のオプションを外す。
- 追記 (2011-08-02) Bazaar Explorer 1.1.2 で、http サーバー上のリポジトリをブラウズできる。これは便利。。
ssh key
launchpad.net に push するための ssh key の置き場所は C:¥Documents and Settings¥%USERNAME%¥.ssh¥id_rsa
Mac で使う
since 2012-07-12
$ sudo port install bzr
エラーになった:
Error: org.macports.activate for port py27-docutils returned: Image error: /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/rst2html.py already exists and does not belong to a registered port. Unable to activate port py27-docutils. Use 'port -f activate py27-docutils' to force the activation. Error: Failed to install py27-docutils Please see the log file for port py27-docutils for details: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_python_py-docutils/py27-docutils/main.log Error: The following dependencies were not installed: py27-docutils py27-paramiko py27-pyrex To report a bug, follow the instructions in the guide: http://guide.macports.org/#project.tickets Error: Processing of port bzr failed
py27-docutils @0.9_0 と @0.9_1 があったので、両方消して入れ直した。
$ sudo port selfupdate $ sudo port uninstall py27-docutils @0.9_0 $ sudo port uninstall py27-docutils # これで両方消える $ sudo port install bzr # また docutils で止まる $ sudo port -f activate py27-docutils # 今度は activate に成功する $ sudo port install bzr $ which bzr /opt/local/bin/bzr
Ubuntu/cygwin で bzr を使う
Ubuntu でのインストールは "sudo apt-get install bzr"
PPA を使う
since 2010-12-17
Ubuntu 9.04 のままで launchpad.net を使いたい。
http://wiki.bazaar.canonical.com/DistroDownloads#Ubuntu
$ sudo emacs -nw /etc/apt/sources.list
下記を末尾に追加:
deb http://ppa.launchpad.net/bzr/ppa/ubuntu jaunty main deb-src http://ppa.launchpad.net/bzr/ppa/ubuntu jaunty main
下記を実行:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8C6C1EFD $ sudo apt-get update $ sudo apt-get install bzr
cygwin で bzr を使ってみる
入れようと思ったら入っていた。
$ bzr --version Bazaar (bzr) 2.0.0 Python interpreter: /usr/bin/python 2.5.2 Python standard library: /usr/lib/python2.5 Platform: CYGWIN_NT-5.1-1.7.1-0.218-5-3-i686-32bit bzrlib: /usr/lib/python2.5/site-packages/bzrlib Bazaar configuration: /home/nishi/.bazaar Bazaar log file: /home/nishi/.bzr.log Copyright 2005, 2006, 2007, 2008, 2009 Canonical Ltd. http://bazaar-vcs.org/ bzr comes with ABSOLUTELY NO WARRANTY. bzr is free software, and you may use, modify and redistribute it under the terms of the GNU General Public License version 2 or later.
ひとりで一台のマシンで使う
自分のディレクトリの中でひとりでファイルのバージョンを管理する。 mercurialっぽい使い方。 後述する bzr help init に書かれているレシピである。
- bzr whoami "自分の名前 <自分のメールアドレス>"
- ~/.bazaar/bazaar.conf に書き込んでいるらしい
- 作業ディレクトリに cd する
- bzr init
- standalone tree を作るよ、format: pack-0.92 だよ、と言われる。
- bzr status
- すべてのファイルが unknown だと言われる。
- bzr ignore ファイル名
- 無視したい一時ファイルを指定できる
- bzr status
- add に .bzrignore が追加されている。ignore に追加したファイルは出てこなくなる。その他は引き続き unknown のままである。
- .bzrignore は単にファイル名が書かれているテキストファイルである。
- bzr commit -m "initial"
- revno 1 としてコミットされる
- ただし add したものしか commit されないようだ
- bzr add ファイル名およびディレクトリ名(複数でもよい)
- bzr add . とすると unknown をまとめてaddしてくれる
- bzr commit -m "second"
- add したものが revno2 としてコミットされる
- bzr log
- revno1 および revno2 の記録が得られる。作業ディレクトリの名前が "branch nick" として使われている
sourceforge.jp からプロジェクトを取得
sourceforge.jp の bazaar で nvdajp の main を落とす。
cygwin で作った /home/nishi/.ssh/id_rsa.pub は登録済み。 $ ssh nishimoto@shell.sourceforge.jp はちゃんと動く。 ssh protocol version 2 対応が必要。
最初に自分の名前を登録する。
$ bzr whoami "Takuya Nishimoto <nishimotz@gmail.com>"
bzr branchをためす
bzr branchは「既存のブランチに基づいたブランチを手に入れる」コマンド。
$ bzr branch http://bzr.sourceforge.jp/view/nvdajp/main Branched 3405 revision(s). $ ls main $ cd main $ bzr info Standalone tree (format: unnamed) Location: branch root: . Related branches: parent branch: http://bzr.sourceforge.jp/view/nvdajp/main/
SVNっぽくcheckoutしてみる
bzr checkout –lightweight は svn っぽく使う方法らしいので試す。
$ bzr co --lightweight http://bzr.sourceforge.jp/view/nvdajp/main
これでもちゃんとカレントに main ディレクトリを作ってくれる。
$ cd main $ bzr update
これでサーバから最新版を取ってくることができるようだ。
ssh+bzrを使う
sf.jp のガイドには bzr branch を使えと書いてあるが、ひねくれて co –lightweight してみる。
$ bzr co --lightweight bzr+ssh://nishimoto@bzr.sourceforge.jp/bzrroot/nvdajp/main
うまくいった。 cd main; bzr update も問題ない。
checkoutとbranch
since 2011-11-19
bzr checkout と bzr branch はどのように使い分けたらいいか?
- ローカルでコミットしながら作業したければ bzr branch
- リモートとのリビジョンの同一性を保ちたいなら bzr checkout
bzr checkout
bzr checkout はリモートのブランチの作業コピーを作る:
bzr checkout http://remote/branch workingdir
- 作業コピーはリモートのブランチと同期する。
- bzr log で確認できる履歴はリモートのブランチと同じ。
- bzr update するとリモートのリポジトリから差分を取得できる。
- もしサーバにコミットする権限があり、この作業コピーでコミットをすると、リモートへのコミットになる。
bzr update すると作業コピーが更新され、リモートのブランチと同期が取れたことがわかる:
C:\work\nvda\nv2011.3>bzr update M source/locale/de/symbols.dic M source/locale/fi/LC_MESSAGES/nvda.po M source/locale/pl/LC_MESSAGES/nvda.po M user_docs/fi/changes.t2t M user_docs/fi/userGuide.t2t M user_docs/pl/changes.t2t M user_docs/pl/userGuide.t2t All changes applied successfully. Updated to revision 4787 of branch http://bzr.nvaccess.org/nvda/releases/2011.3
bzr info するとチェックアウトであることがわかる:
Checkout (format: 2a) Location: checkout root: . checkout of branch: http://bzr.nvaccess.org/nvda/releases/2011.3/
bzr commit すると、リモートに対してコミットを行う。例えばリモートが launchpad.net であれば launchpad 側がいきなり更新される。
bzr branch
bzr branch はリモートをブランチした新しいブランチをローカルに作る:
bzr branch http://remote/branch workingdir
- リモートと異なるブランチなので、リモートブランチとは自動的に同期しない。
- bzr merge http://remote/branch するとリモートのリポジトリから最新の変更を取得できるが、これはコミットされていない状態なので、さらに bzr commit しなくてはならない。
- マージを commit すると、bzr log で見られるリビジョン番号はリモートのブランチと一致しなくなる。
- もしサーバに push する権限があり、この作業コピーからリモートに push をすると、ローカルで行った変更をリモートに反映できる。
bzr info すると:
Standalone tree (format: 2a) Location: branch root: . Related branches: parent branch: http://bzr.nvaccess.org/nvda/main/ submit branch: http://bzr.nvaccess.org/nvda/main/
bzr branch で作った作業コピーのディレクトリで bzr pull すると、parent branch の差分を取り込んでくれる(bzr branch しなおしたのと同じ状態になる)。マージだとコミット前の状態になるので、bzr merge と bzr pull はこの状況では同じではない。
bzr push
since 2011-01-16
launchpad.net で push する先を変えるには?
remember オプションを使うとデフォルトのpush先を変えてくれる。
デフォルトの push 先は bzr info で確認できる:
> bzr info Repository tree (format: 2a) Location: shared repository: C:/work/nvda repository branch: . Related branches: push branch: bzr+ssh://bazaar.launchpad.net/~nishimotz/nvda/nvdajp_jtalk/ parent branch: C:/work/nvda/main
bzr push で送信先を変更:
> bzr push --remember lp:~nishimotz/nvda/jtalk Connected (version 2.0, client Twisted) Authentication (publickey) successful! Secsh channel 1 opened. No new revisions to push.
デフォルトの push 先が変更されたことを確認:
> bzr info Repository tree (format: 2a) Location: shared repository: C:/work/nvda repository branch: . Related branches: push branch: bzr+ssh://bazaar.launchpad.net/~nishimotz/nvda/jtalk/ parent branch: C:/work/nvda/main
-
- push branch は作業ファイルをコピーする先の(個人用)リポジトリ
- submit branch は最終的に変更を反映させたい(例えばプロジェクト用)レポジトリ
作業スペースの構成
ブランチのレイアウト SVN 形式でも、入れ子形式でも、開発者の名前をブランチ名に使っても、自由自在。
bzrのコマンド
4種類の使い方?例えば「機能ブランチを開始する」を使ってみたいので、もう少し詳しく。
bzr log
最後のリビジョンの情報を見る:
$ bzr log -r-1 ------------------------------------------------------------ revno: 3538 committer: Takuya Nishimoto <nishimotz@gmail.com> branch nick: nvda timestamp: Fri 2010-11-19 15:34:16 +0900 message: jtalk renamed to nvdajp_jtalk, dummy supportedSettings
リビジョン 20 以降のログを見る:
$ bzr log -r20..
リビジョン 20 の差分をパッチ形式で見る:
$ bzr log -r20 -p
bzr branch
使い方:
- launchpad.net からローカルの作業リポジトリを作る。
- ローカルの作業リポジトリを別名の作業リポジトリに複製する。
- cvs の checkout に相当する処理も branch で、という印象。
$ bzr help branch Purpose: Create a new branch that is a copy of an existing branch. Usage: bzr branch FROM_LOCATION [TO_LOCATION] (omitted) Aliases: get, clone See also: checkout
リビジョンを指定してチェックアウトする:
bzr branch -r リビジョン番号 リポジトリ 作成ディレクトリ
bzr branch のバグ
since 2011-07-05
aishimoto さんのバグに遭遇してしまった。
Windows 7 (x64) で bzr-2.3.1-1-setup.exe 使用。
https://bugs.launchpad.net/bzr/+bug/663957
c:\work\nvda>bzr branch lp:~nishimotz/nvdajp/MiscellaneousDependencies miscdep Connected (version 2.0, client Twisted) Authentication (publickey) successful! Secsh channel 1 opened. bzr: ERROR: Unprintable exception TransformRenameFailed: dict={'errno': 13, 'fro m_path': u'C:/work/nvda/miscdep/.bzr/checkout/limbo/new-3', 'to_path': u'C:/work /nvda/miscdep/source', 'why': '[Error 5] \x83A\x83N\x83Z\x83X\x82\xaa\x8b\x91\x9 4\xdb\x82\xb3\x82\xea\x82\xdc\x82\xb5\x82\xbd\x81B'}, fmt='Failed to rename %(fr om_path)s to %(to_path)s: %(why)s', error=UnicodeDecodeError('ascii', '[Error 5] \x83A\x83N\x83Z\x83X\x82\xaa\x8b\x91\x94\xdb\x82\xb3\x82\xea\x82\xdc\x82\xb5\x8 2\xbd\x81B', 10, 11, 'ordinal not in range(128)')
2011-11-19 bzr 2.4.2 ではこのバグが出なくなった。
2012-02-18 bzr 2.4.2 で久しぶりにこのエラーに遭遇した。
bzr checkout
bzr branch のドキュメントで see also と言われたので checkout を調べる。
作業スペースを構成するによると、オプション –lightweight つきの checkout は CVS や SVN の co と同じ感覚になるようだ。
$ bzr help checkout Purpose: Create a new checkout of an existing branch. Usage: bzr checkout [BRANCH_LOCATION] [TO_LOCATION] (omitted) Aliases: co See also: branch, checkouts
リビジョン番号を指定して取り出す
2011-02-17
shared-repo を使い、特定のブランチの revno 23 を miscdep23 ディレクトリに取り出す:
$ bzr co -r 23 bzr+ssh://bazaar.launchpad.net/~nishimotz/nvdajp/MiscellaneousDependencies/ miscdep23
bzr init-repo
bzr init-repository / bzr init-repo は同じことらしい。init とは違うらしい。
$ bzr help init-repo Purpose: Create a shared repository to hold branches. Usage: bzr init-repository LOCATION (omitted) Examples: Create a shared repositories holding just branches: bzr init-repo --no-trees repo bzr init repo/trunk Make a lightweight checkout elsewhere: bzr checkout --lightweight repo/trunk trunk-checkout cd trunk-checkout (add files here) Aliases: init-repo See also: branch, checkout, init, repositories
じゃあ bzr init も。
Purpose: Make a directory into a versioned branch. Usage: bzr init [LOCATION] (omitted) Recipe for importing a tree of files: cd ~/project bzr init bzr add . bzr status bzr commit -m "imported project" See also: branch, checkout, init-repository
間違いを取り消す
since 2011-11-02
bzr revert は、最後のコミット以降のファイルへの変更を取り消す。
> bzr revert foo.py
- 利用方法としては、「動いている状態」でこまめにコミットしておいて、動かなくなったら revert する。
- bzr revert -r リビジョン番号 という使い方もある。
bzr uncommit は最後のコミットを取り消す。
- uncommit すると「コミットする直前の状態」になる。つまり、作業ファイルだけが変化されていて、それがリポジトリに反映されていない状態。
- そこからさらに revert すれば、作業ファイルは「一つ前のリビジョンの状態」に戻る。すなわち:
bzr uncommit bzr revert
- launchpad.net などサーバーのレポジトリと連動している場合、ローカルで uncommit したあとで、push –overwrite すれば、サーバー側のコミットも取り消すことができる。
bzr push --overwrite
bzr remove
ファイルを消さないで、bzr による管理から除外するには:
bzr remove --keep file.bin
ファイル名を付け替える
$ bzr mv oldname newname $ bzr commit -m "renamed"
他のブランチからマージする
since 2011-07-15
例えばローカルに branch1 と branch2 ディレクトリがあって、片方からもう一方にマージ:
cd branch2 bzr merge ../branch1
例えば作業ディレクトリに launchpad.net のブランチをマージ:
cd branch1 bzr merge lp:~username/project/branch2
マージ元での複数のリビジョンは、マージしてコミットすると、一つのリビジョンにまとめられる。
このときリビジョン番号に小数点がつく。
bzr log でマージの中身を見る
since 2011-07-15
以下は nvdajp での作業例。
マージされた内容を見る:
bzr log -r-1 ------------------------------------------------------------ revno: 4171 [merge] committer: Takuya Nishimoto <nishimotz@****.com> branch nick: jp2011.1 timestamp: Fri 2011-07-15 07:59:15 +0900 message: merged mshinke revno 4136 ------------------------------------------------------------ Use --include-merges or -n0 to see merged revisions.
インクルードされたマージの中身を見る:
bzr log -r-1 -n0 ------------------------------------------------------------ revno: 4171 [merge] committer: Takuya Nishimoto <nishimotz@****.com> branch nick: jp2011.1 timestamp: Fri 2011-07-15 07:59:15 +0900 message: merged mshinke revno 4136 ------------------------------------------------------------ revno: 4072.1.64 committer: Masataka Shinke <mshinke@****.jp> branch nick: releases_2011.1 timestamp: Fri 2011-07-15 07:29:37 +0900 message: imm(32bit)動作時に日本語入力が切れる問題の修正。 ------------------------------------------------------------ revno: 4072.1.63 [merge] committer: Masataka Shinke <mshinke@****.jp> branch nick: releases_2011.1 timestamp: Mon 2011-07-11 14:39:52 +0900 message: lp:~nishimotz/nvdajp/releases_2011.1:4170 をマージ ------------------------------------------------------------ revno: 4072.1.62 [merge] committer: Masataka Shinke <mshinke@****.jp> branch nick: releases_2011.1 timestamp: Mon 2011-07-11 09:41:31 +0900 message: lp:~nishimotz/nvdajp/releases_2011.1:4169 をマージ
リビジョンに名前(タグ)をつける
bzr revno と bzr tags
bzr branch してきたプロジェクトの現在のリビジョン番号と過去のタグ:
> bzr revno 4057 > bzr tags release-0.6p1 1640 release-0.6p2 2145 release-0.6p3 2517 release-2009.1 3164 release-2009.1beta1 3098 release-2009.1rc1 3140 release-2010.1 3410 release-2010.1beta1 3379 release-2010.1rc1 3407 release-2010.2 3839.1.52 release-2010.2beta1 3837 release-2010.2beta2 3839.1.26 release-2010.2rc1 3839.1.38 release-2011.1beta1 4056 releases ?
タグをつけてlaunchpadにpushする
since 2011-06-27
C:\work\nvda\jp2011.1>bzr tag jpdev110627 Created tag jpdev110627. C:\work\nvda\jp2011.1>bzr push Using saved push location: bzr+ssh://bazaar.launchpad.net/~nishimotz/nvdajp/releases_2011.1/ Connected (version 2.0, client Twisted) Authentication (publickey) successful! Secsh channel 1 opened. No new revisions to push.
http://bazaar.launchpad.net/~nishimotz/nvdajp/releases_2011.1/changes をみると、 revno 4160 に jpdev110627 がついていることが分かる。
タグを修正する
since 2011-12-14
http://doc.bazaar.canonical.com/beta/ja/user-guide/undoing_mistakes.html にも書いてある。
タグを取り消す:
bzr tag タグ名 --delete
過去のリビジョンにタグをつける:
bzr tag -r リビジョン番号 タグ名
衝突の解消
bzr merge すると衝突が起きることがある。
「もしマージの際にコンフリクトが発生すれば、ベース名が同じ3つのファイルが生成されます。共通の基準となるのが".BASE"で、修正点を含むのが".THIS"、そして他のツリーの修正を含むのが".OTHER"です。 kdiff3といったプログラムを使えば、安心してそれらを一つにマージすることができます。コミットするためにはマージされた".THIS"ファイルを元のファイル名へとリネームする必要があります。コンフリクトの解消をするにはresolveコマンドを使わなければなりません。これは".OTHER"や".BASE"ファイルを削除します。これらのファイルがある限り、コミットには失敗します。」
衝突の解消
手作業で修正したら bzr resolve コマンドで解決を宣言する。
- bzr resolve すると xxx.{OTHER,BASE} が削除されるという話
bzr conflicts コマンドで衝突ファイル一覧。
ファイル名を指定しないでまとめて衝突解消(の宣言):
bzr resolve --all
衝突したときのファイルの内容
since 2011-07-27
拡張子が何もついていない(生成されたファイルではない)元のファイルの内容。
完全にファイル全体が変更されたと扱われてしまった場合:
<<<<<<< TREE 変更前(元のファイル)の内容 (xxx.THIS の内容) ======= 変更後(マージされたファイル)の内容 (xxx.OTHER の内容) >>>>>>> MERGE-SOURCE
criss-cross
bzr merge すると
Warning: criss-cross merge encountered. See bzr help criss-cross.
と出てくる。
remerge で解決することがあるらしい。
bzr remerge --weave
チェリーピック
「ブランチの変更の全部ではなく一部だけを選んでマージする」
http://doc.bazaar.canonical.com/bzr.dev/ja/user-guide/adv_merging.html
foo ブランチのリビジョン Xによってなされた変更のみをマージするためには: bzr merge -c X foo foo ブランチのリビジョンXまでの変更のみをマージするためには: bzr merge -r X foo foo のリビジョンX以降の変更のみをマージするためには: bzr merge -r X.. foo foo ブランチのリビジョンXからリビジョンYまでの変更のみをマージするには: bzr merge -r X..Y foo
- -c = –change
- -r = –revison
bzr help revisionspec でリビジョン指定方法の説明。
launchpad.net との関係
launchpad.net におけるチェンジセット
http://bazaar.launchpad.net/~username/projectname/branchname/revision/NNNN
をチェリーピックする操作
bzr merge -c NNNN lp:~username/projectname/branchname
になる。
特定のリビジョンの変更だけをマージ
- bzr merge (ブランチ) でマージした。マージしたくない変更が含まれていた。
- bzr revert で元に戻す。
- マージ元のリビジョン番号を確認する。リビジョン NNNN の変更だけをマージしたい。
- bzr merge -c NNNN (ブランチ) で無事にお目当ての変更だけをマージできた。
- bzr commit でマージされた変更を作業ブランチにコミット。
- bzr push で launchpad にコピー。
不具合がどのリビジョンで起きたかを調べる
since 2011-11-01
aBranch の revno 200 で不具合が見つかった。revno 100 では起きていなかった。
まず revno 100 の作業ブランチを作る:
bzr branch aBranch -r 100 workingBranch
途中までマージする:
cd workingBranch bzr merge ../aBranch -r 100..150
この作業ファイルで動作を確認する。 問題がなかったら続きをマージしたいところだが commit しないと merge できない、と怒られるので、revert してやり直すことにする:
bzr revert bzr merge ../aBranch -r 100..175
これを繰り替えれば、どの revno で不具合が混入したか突き止めることができる。
- git だと bisect というサブコマンドで二分探索テストができるらしい。
revno 181 で不具合が起きたことがわかったとする。もともとのブランチを revno 180 に戻すには:
cd ../aBranch bzr merge . -r 200..180
- リバース・チェリーピックというらしい。
- merge なので、コミットしないと次のことができない状態。
- bzr revert -r 180 と同じかも知れない。。
リバースマージ
since 2011-11-03
こんな問題に遭遇したので、記録しておく。
- Aブランチで作業をしていた。途中のリビジョン100でBブランチからのマージを行った。
- Aブランチのリビジョン110で、不具合に気づいたので、リビジョン90の内容に戻すリバースチェリーピックを行い、コミットしてリビジョン111になった。
- Aブランチでさらに修正を行いコミットして、リビジョン112になった。
- この状態でAブランチにはBブランチの変更は含まれていないが、再度Bブランチをマージしようとすると、何もマージするものがない、と言われる。
- どうやら、Aブランチには「Bブランチの変更」(リビジョン100)と、「Bブランチの変更の取り消し」(リビジョン111)の両方がすでに含まれているので、リビジョン100と重複すると判断されてBブランチからのマージが不要となってしまうらしい。
- 結局どうしたかというと、uncommit と revert を繰り返して、リビジョン 110 の状態にリポジトリを戻して、リバースチェリーピックの代わりに、必要最低限の変更をマージではなく手作業で行った。
ロックの解除
since 2012-05-27
>bzr push Using saved push location: bzr+ssh://bazaar.launchpad.net/~nvdajp/nvdajp/jp2012.2/ Unable to obtain lock held by misono@bazaar.launchpad.net on crowberry (process #5730), acquired 18 hours, 37 minutes ago. See "bzr help break-lock" for more.bzr: ERROR: Could not acquire lock "(remote lock)": bzr+ssh://bazaar.launchpad.net/~nvdajp/nvdajp/jp2 >bzr break-lock lp:~nvdajp/nvdajp/jp2012.2 Break held by misono@bazaar.launchpad.net on crowberry (process #5730), acquired 18 hours, 39 minutes ago? [y/n]: y Broke lock bzr+ssh://bazaar.launchpad.net/~nvdajp/nvdajp/jp2012.2/.bzr/branch/lock 18kB 2kB/s \ >bzr push Using saved push location: bzr+ssh://bazaar.launchpad.net/~nvdajp/nvdajp/jp2012.2/ Pushed up to revision 5204.
変更履歴を調べる
since 2012-08-25
行ごとに、最終変更されたリビジョン、コミットしたユーザー、内容を表示。
bzr annotate FILENAME
同じことは emacs で vc-annotate でできる。