夜行録 - 酔歩.net

日暮れて道遠し さらに夜道を行く もって夜行録と名付く

darcs 利用中

vaio を修理に出しているあいだ、 commit できないと作業したくなくなるんで mac の方で darcs で記録。

方法は、 colinux 上の最新の svn working copy を mac へ。 .svn/ を削除して darcs に import 。こいつを親にして darcs get で working copy 的リポジトリを複数作って別個に機能追加。子同士では darcs pull で merge 。

これで済んでる間は破綻しないんだけどねぇ

ちなみに、会社の某所のクラスターでも hg で同様のことやったけど、やっぱり同期がメドいなぁ…。
working copy は tar 玉で持ってくからいいけど、作業中に共有しとかなきゃならない重要な変更が出てくると、差分で持ってって向うの master で commit して working copy に伝播とか…、きっとそのうち破綻する。

結局 darcs から svn へ持ってゆく方法は unified diff。darcs - darcs 間なら send でもうちょっと情報をつけられるけど、相手が svn じゃ意味なし。そのかわり、 svn の commit log に darcs の patch 名を書いてやることにしてみた。
機能追加やその他の比較的どうでもいい cleanup ごとに適当に差分を束ねて抽出しておいて svn の working copy へ patch して commit。

同期は、 svn 上で全部 commit してから working copy の tar 玉を作ってもってく。 svn から import に使った darcs リポジトリには、 darcs の差分を全部 pull で集めておく。この上に一応 svn の tar 玉を展開。基本的には同一のはず。
上の、別の場所にある hg の分の差分も svn 上で merge して darcs 側へ。この分が違うんでここで darcs record。これで一旦同期を取り戻したので、昔の作業リポジトリを使い続ける必要はとくになくなって、新規に darcs get し直しでいいんだな。

某所の hg 側も同様に import 用リポジトリで同期/commit。

darcs は revision 番号がないので patch 名(commit log)でしか patch を point できない。それを考えずに、うっかり、し忘れた commit をほぼ同じ commit log で登録してしまって、前のが指定できなくて悩む。正規表現使えるんじゃないのか?なんで$が行末にマッチしない?と数日間悩んだが、実は行末の前に whitespace があったというオチ……。
ちなみに darcs diff は --patch では REGEXP を取るが --match では PATTERN を取る。…… PATTERN って何ね?正規表現となにが違うのか?と思ったら、 exact, name, hash, author date の5つのタイプで指定ができるらしい。てか man page に何も書いてなくて悩んだぞ。

2008年04月25日 (Fri) - 14:23:19 - その他雑記 - 3106x - permalink
Karma points: 4. Do you like this article? [yes/no]