分散バージョン管理
しばらくノート PC を持ち歩くのをやめていたのだけど、最近復活。
平日は仕事用の Vista Ultimate を入れた VAIO SZ90PS を持ち歩き、休日は FreeBSD 6-STABLE を入れた ThinkPad X22 を持って移動してる。サーキットで走る合間の時間や、ホテルの部屋で夕食前の時間などを使ってコード書き。
こうなると、ネットワークにつながっていない環境で作業することも増えるため、分散型のリポジトリ管理システムが欲しくなる。しばらく subversion + svk を使っていたが、ローカルで作業してミラー元に push し直すときにマージできずに止まってしまうことが何度か続いたので、subversion 捨てて最初から分散リポジトリ管理システムとして設計されたソフトに乗り換えようかと検討中。
最初にユーザ数が多そうな mercurial を使おうと FreeBSD の ports からインストールしたところ、どうもコンフリクト発生時のマージ動作がおかしい。おそらく私の環境依存の問題で、どこで問題が起きてるか突き止める自信がなかったため今回は保留。他に monotone, bazaar-ng, darcs と試してみて、まずは設計思想がシンプルな darcs を使い込んでみることにする。
既存の subversion リポジトリから darcs リポジトリへの変換は tailor を使えば OK。ただし途中でフォルダ名の変更 (svn mv) を行っている場合は、tailor の設定で svn, darcs のフォルダを一致させておく必要がある。
tailor のサンプルにあるように [svn:...] と [darcs:...] で subdir を分けると、途中で TAILOR-HACKED-TEMP-NAME フォルダの削除に失敗したというような意味合いのメッセージが出て止まる。
darcs 本体は Haskell コンパイラ ghc version 6 を使って書いてある。コンパイル済みのバイナリが使える環境なら良いけど、そうでないと Haskell コンパイラのインストールから始める必要があって、手間がかかる。私のところには 1 台 FreeBSD 5.4-RELEASE が残っていて、これに ghc 6 を入れるのに時間を食った (ports だと FreeBSD 5 系列では動かなかった)。
darcs のインストールが終わってしまえば、あとは簡単。subversion のようにバックエンドにデータベースを使っていないため、リポジトリの同期も http と ssh を使える環境なら 5 分でセットアップできる。公開リポジトリ。
まだ使い始めたばかりだけど、やはり subversion と比較すると周辺ツールの充実度合いは低い。またバージョン管理の中核的な部分から離れた便利な機能、たとえば commit 前後の hook 処理やキーワード置換、ファイル改行コードの管理なども不足している。
ただ、基本的なアイデアとしてバージョン管理をシンプルにパッチの集合とみなし、他でよく見かける「古いものから新しいものへ時系列で伸びていく枝のようなもの」と捉えていないところが、いろいろなところで物事をシンプルにするのに寄与している。あとは面倒なコンフリクトが発生したときの頑強さが気になるところだが、これは使っていればその内に嫌でも出くわすだろうから、その時のお楽しみということで。
平日は仕事用の Vista Ultimate を入れた VAIO SZ90PS を持ち歩き、休日は FreeBSD 6-STABLE を入れた ThinkPad X22 を持って移動してる。サーキットで走る合間の時間や、ホテルの部屋で夕食前の時間などを使ってコード書き。
こうなると、ネットワークにつながっていない環境で作業することも増えるため、分散型のリポジトリ管理システムが欲しくなる。しばらく subversion + svk を使っていたが、ローカルで作業してミラー元に push し直すときにマージできずに止まってしまうことが何度か続いたので、subversion 捨てて最初から分散リポジトリ管理システムとして設計されたソフトに乗り換えようかと検討中。
最初にユーザ数が多そうな mercurial を使おうと FreeBSD の ports からインストールしたところ、どうもコンフリクト発生時のマージ動作がおかしい。おそらく私の環境依存の問題で、どこで問題が起きてるか突き止める自信がなかったため今回は保留。他に monotone, bazaar-ng, darcs と試してみて、まずは設計思想がシンプルな darcs を使い込んでみることにする。
既存の subversion リポジトリから darcs リポジトリへの変換は tailor を使えば OK。ただし途中でフォルダ名の変更 (svn mv) を行っている場合は、tailor の設定で svn, darcs のフォルダを一致させておく必要がある。
[DEFAULT]
verbose = True
projects = svn-to-darcs
[svn-to-darcs]
root-directory = /home/issei/tmp
source = svn:myNiftyProject
target = darcs:myNiftyProject
state-file = svn-to-darcs.state
[svn:myNiftyProject]
repository = http://svn.issei.org/gameobj/svn
module = /GameObj/trunk
subdir = sharedsubdir
[darcs:myNiftyProject]
repository = /home/issei/tmp/GameObj
subdir = sharedsubdir
tailor のサンプルにあるように [svn:...] と [darcs:...] で subdir を分けると、途中で TAILOR-HACKED-TEMP-NAME フォルダの削除に失敗したというような意味合いのメッセージが出て止まる。
darcs 本体は Haskell コンパイラ ghc version 6 を使って書いてある。コンパイル済みのバイナリが使える環境なら良いけど、そうでないと Haskell コンパイラのインストールから始める必要があって、手間がかかる。私のところには 1 台 FreeBSD 5.4-RELEASE が残っていて、これに ghc 6 を入れるのに時間を食った (ports だと FreeBSD 5 系列では動かなかった)。
darcs のインストールが終わってしまえば、あとは簡単。subversion のようにバックエンドにデータベースを使っていないため、リポジトリの同期も http と ssh を使える環境なら 5 分でセットアップできる。公開リポジトリ。
まだ使い始めたばかりだけど、やはり subversion と比較すると周辺ツールの充実度合いは低い。またバージョン管理の中核的な部分から離れた便利な機能、たとえば commit 前後の hook 処理やキーワード置換、ファイル改行コードの管理なども不足している。
ただ、基本的なアイデアとしてバージョン管理をシンプルにパッチの集合とみなし、他でよく見かける「古いものから新しいものへ時系列で伸びていく枝のようなもの」と捉えていないところが、いろいろなところで物事をシンプルにするのに寄与している。あとは面倒なコンフリクトが発生したときの頑強さが気になるところだが、これは使っていればその内に嫌でも出くわすだろうから、その時のお楽しみということで。

0 件のコメント:
コメントを投稿
この投稿へのリンク:
リンクを作成
<< ホーム