mercurial による孤立環境のファイル同期
試してみた。
Mercurial を選んだのは、別に python 萌えだからではなく以下に見るように野良 build の都合
(darcs のために Haskell の build からやってるわけにはいかん)
colinux をマスター環境、他に host A, host B があったとする。
どのホストも FW の遥か後方に位置していて互いに direct access はできない
-
インストール
-
colinux は root を握っているので適当にバイナリインストール
-
host A, host B ではpython はインストール済みとする
-
ソースを取得
-
(make all して) make install-home すると、 ~/ 以下に実行ファイルと python モジュールがインストールされる
-
モジュールのインストール先( ~/lib/python とか) を PYTHONPATH に追加する
-
マスター側で登録
($HOME の dot file を CVS 管理しているので、これを hg でも二重に管理する)
-
$HOME で hg init
-
とりあえず、 .screenrc .zshenv .zshrc .zlogin .zlogout あたりを hg add
ちなみに CVS リポジトリの方の最初の日付は 2002年7月22日。登録されてるファイルには .Xresources から .wl, .addresses, .folders はては .signature まで…
-
hg commit
-
(hg bundle できなかったので) hg export tip > H0
-
この H0 を、境界ホストを通じてなんとか host A まで転送する
-
host A での登録
-
とりあえず tmp dir を作成しておいて、そこで hg init
-
hg import H0
-
.hg ディレクトリを ~/ に mv
-
hg diff で確認すれば host A specific な修正が判るので適宜修正して hg commit
-
これを host B に反映させるべく抽出する。
hg log で revision 番号を確認して hg export rev > H1
(import する時のことを考えて、適当に分割して commit/export すること)
-
この H1 を境界ホストを通じてなんとか host B まで転送
-
host B での登録
-
H0 を境界ホストを通じてなんとか host B に転送
-
host A と同様に、 hg init して H0 と H1 を import
-
.hg を ~/ に mv
-
hg diff しててきとうに修正して hg commit
-
修正分を hg export rev > H2 してこいつをなんとか host A まで転送
-
host A で merge
-
hg import する
-
マスター環境に戻る
-
H1 および H2 を hg import すれば、 host A, host B の差分を取り込める
-
cvs commit して終了
注意
たとえば上の例では、 host A, host B では .zlogin/.zlogout はほとんど殺してあったりする。
なので host A で修正して commit する時は、こいつだけまず commit する。
export する時もこれだけの差分で抽出しておいて、 host B には持っていって適用するが、
マスター環境には持っていかない
しかし、やっぱり転送の部分が死ぬ程面倒だな〜。
文章で書くと簡単なんだが、一々 scp して、 host によっては ssh-agent が効かなかったり DNS 逆引きの timeout 待ちされたり、そもそも DNS 引きそこなったり…
これに VPN まで加わったらやっぱり死ねる
そして、これ、差分/revision control の部分って結局人手でやってるんだよな〜。やっぱ破綻しそう…