svnを使っているうちに、だんだんとtagが打てないとか気分的に使い辛くなってきたので、分散型CSMのBazaarに移行。
インストールとか
Macだとパッケージが出てるから、それをインストール。なぜか10.5では一つ古いバージョンしかでてないけど、特に困らず。FreeBSDでは、devel/bazaar-ngをインストール。
svnのリポジトリをbazaarに移行する方法がいまいちわからなかったので、svn2bzrをcheckoutして取ってきて、移行。
でも、なぜか上手く動かなかった*1ので、以下のパッチを作成して移行。
--- svn2bzr.py 2008-04-07 01:02:43 +0000 +++ svn2bzr.py 2009-02-19 16:15:15 +0000 @@ -650,6 +650,11 @@ self._tree_cache_filename = tempfile.mktemp('-saved-trees') self._tree_cache = anydbm.open(self._tree_cache_filename, "c") + _tcf = self._tree_cache_filename + if not os.path.exists(_tcf): + if os.path.exists("%s.db"%(_tcf)): + self._tree_cache_filename = "%s.db" % (_tcf) + self._tree_cache_itel = [] self._tree_cache_mem = {} self._tree_cache_mem_order = [] @@ -666,6 +671,8 @@ def _save_tree(self, revno, tree): self._log.debug("Saving revision %d in disk cache" % revno) + print "Saving revision %d" % (revno) + self._tree_cache_itel.append(str(revno)) self._tree_cache[str(revno)] = bz2.compress(marshal.dumps(tree, 2)) def _load_tree(self, revno): @@ -680,10 +687,21 @@ if revno in self._tree_cache_mem: self._log.debug("Found revision %d in memory cache" % revno) return self._tree_cache_mem[revno] - if str(revno) in self._tree_cache: - return self._load_tree(revno) + try: + if str(revno) in self._tree_cache: + return self._load_tree(revno) + except: + pass + try: + if self._tree_cache[str(revno)]: + return self._load_tree(revno) + except: + pass + tree_revno = -1 - for cached_revno_s in self._tree_cache: + for cached_revno_s_no in self._tree_cache_itel: + #cached_revno_s = self._tree_cache[cached_revno_s_no] + cached_revno_s = cached_revno_s_no cached_revno = int(cached_revno_s) if tree_revno < cached_revno < revno: tree_revno = cached_revno
挙動とか
commitしても、他のリポジトリには反映されず、その場所しかリビジョンは上がっていかない。どうもcheckoutとbranchは同じみたいで、まだその二つの明確な違いがわからね。大本に反映させるにはpushしたりする必要があるけど、pushする前にpull(取得)してmergeやupdateをする必要がある。他のリポジトリと同期を取るのが面倒だけど、一元集中みたいなことをしておけば楽かと。
$HOME/.bazaar/ 以下に設定ファイルがある。以下一覧
コマンドとか
- ほとんどsvnと同じ。寧ろ、bzr mvが出来て*3うれしかったりする。今のところ、sftp経由で使ってるけど、後々はwebdavあたりに行きたいなぁ・・・
- svnと決定的に違う所
- push : 自分の変更を相手に押しつける。引数にリポジトリーのパスがない場合、そのリポジトリの親元に押しつけることになる。
- pull : 相手の変更を自分のリポジトリに持って来る。引数にリポジトリーのパスがない場合、そのリポジトリの親元の情報を引っ張ってくる。
Double-Booking したら
bzr merge したらダブルブッキングする時がある。その時は、ダブルブッキングしたファイルは「ファイル名.ORGIN」とか「ファイル名.NEW」とかになっているから、一番最善の状態に変更させて、bzr revertしてcommitかしら。そこはsvnと同じかも。
疑問とか
- hookはどうやるの?
- $Id:$とかのキーワードはどうやるのかしら