bzr-svnを使ってSubversionでセンター管理されてれいるソースをローカルでbazaarで管理することができます。
Subversionにアクセスできないときにローカルのbazaarにコミットしておいて、Subversionにアクセスできるときに、まとめてコミトできます。
Subversionの古いバージョンで作成したリポジトリを使っている場合、マージトラッキングがサポートされませんが、bzr-svnを使うとbzrのマージトラッキングを使うことができます。
開発ツールによっては、各ディレクトリに作成される.svnディレクトリを勝手に削除したりするツールがあります。
こうした開発ツールのソースは、Subversionのexportとsvn_load_dir.plを使っていました。
bzrは、トップディレクトリに.bzrを作るだけなので、bzr-svnを使うと管理が簡単になります。
インストール
aptでSubversion, bazaar, bzr-svnをインストールします。
$ sudo apt-get subversion bzr bzr-svn
subversion用のテストリポジトリ
Subversionの適当なリポジトリを用意します。
$ export REPO=/tmp/svn $ svn ls $REPO branches/ tags/ trunk/ $
bzr-svn用のbzrリポジトリを作成
オプションに–rich-root-packを付けてbzrリポジトリを作成します。
このオプションを付けることでSubversionのリポジトリを扱うことがでるようになります。
$ bzr init-repo --rich-root-pack bzr-repo Shared repository with trees (format: rich-root-pack) Location: shared repository: bzr-repo $ $ cd bzr-repo/ $ ls -la 合計 12 drwxr-xr-x 3 ksaito ksaito 4096 2010-05-13 22:55 . drwxr-xr-x 4 ksaito ksaito 4096 2010-05-13 22:55 .. drwxr-xr-x 4 ksaito ksaito 4096 2010-05-13 22:55 .bzr $
subversionのtrunkをbzrリポジトリにチェックアウト
bzrのcoコマンドでSubversionリポジトリのURLを指定します。
$ bzr co $REPO/trunk svn-trunk Initialising Subversion metadata cache in /home/ksaito/.cache/bazaar/svn/12dd016d-98d1-4012-84ba-f756777f9405. $ ls svn-trunk $
bzrリポジトリに作業用のブランチを作成
ローカル作業用にbzrのブランチを作成します。
$ bzr branch svn-trunk svn-branch Branched 1 revision(s). $ ls svn-branch svn-trunk $
bzrリポジトリの作業用ブランチで開発
作成したブランチで通常の開発をします。
bzrヘのコミットはできますが、Subversionには反映されません。
$ cd svn-branch/ $ touch test1.txt $ touch test2.txt $ bzr st unknown: test1.txt test2.txt $ bzr add adding test1.txt adding test2.txt $ bzr commit -m "Added test files." Committing to: /home/ksaito/tmp/bzr-repo/svn-branch/ added test1.txt added test2.txt Committed revision 2. $
bzrリポジトリの作業用ディレクトリの修正をSubversionにコミット
bzrにコミットした内容をSubversionに反映します。
$ svn ls $REPO/trunk $ cd ../svn-trunk/ $ bzr update Tree is up to date at revision 1. $ bzr merge ../svn-branch +N test1.txt +N test2.txt All changes applied successfully. $ bzr commit -m "commit for svn" Committing to: /home/ksaito/tmp/svn/trunk added test1.txt added test2.txt Committed revision 2. $ svn ls $REPO/trunk test1.txt test2.txt $ svn log $REPO/trunk ------------------------------------------------------------------------ r2 | ksaito | 2010-05-13 23:06:37 +0900 (水, 13 5月 2010) | 1 line commit for svn ------------------------------------------------------------------------ r1 | ksaito | 2010-05-13 22:53:32 +0900 (水, 13 5月 2010) | 1 line init ------------------------------------------------------------------------ $
Subversionリポジトリで修正
Subversion側で修正が発生した場合の取り込み方法です。
まず、Subversionのソースを修正します。
$ svn co $REPO/trunk A trunk/test2.txt A trunk/test1.txt Checked out revision 2. $ cd trunk/ $ ls test1.txt test2.txt $ touch test3.txt $ svn add test3.txt A test3.txt $ svn commit -m "add test3.txt" Adding test3.txt Transmitting file data . Committed revision 3. $
bzrのローカルブランチに取り込み
bzrに修正を取り込みます。
$ bzr update +N test3.txt All changes applied successfully. Updated to revision 3. $ cd ../svn-branch $ bzr pull Using saved parent location: /home/ksaito/tmp/bzr-repo/svn-trunk/ +N test3.txt All changes applied successfully. Now on revision 3. $