Mercurial を WIndows に2009年09月07日 11時44分46秒

NetBeans のプロファイルを使いたいので、最近 Windows 上で NetBeans を使うようになってきた。やっぱり履歴管理は行ないたい。そして、別途のレポジトリ管理などはやりたくないので Mercurial を使うことにした。

Mercurial binary packages for Windows and Mac OS X から Mercurial 1.3.1 を取得。2009-08-08 の Release version になる。ダウンロードして、インストール。

一つだけインストールすればよかったみたいだ。簡単に NetBeans から使えるようになった。

NetBeans を通さずに Mercurial を使わなければいけない場合2009年06月29日 12時11分39秒

NetBeans には CVS を始めとする履歴管理のソフトウェアも使える様になっている。CVS は自前の実装のようだが、Subversion や Mercurial 等は、別途にインストールしないと使えなかった。

NetBeans からは rename や copy 等のコマンドが使えない。そこで、これらのコマンドを使う時は、わざわざターミナルを準備する必要がある。最近の履歴管理のソフトウェアで rename や copy が無いのはむしろ旧来型の CVS ぐらいな物だ。しかし、NetBeans にはこれらのコマンドは使えない。

Java 等のソースコードだったら、リファクタを使っても良いのだが。リファクタを使うと、ファイルの名前を変えて適切に必要箇所も変更してくれるので重宝している。

しかし考えてみると git では rename や copy 同等の事を勝手に判別してくれる。

バージョン管理 short tours2009年02月09日 12時34分12秒

一人で各種の履歴管理システム/プログラムを使い初める為の簡単な例。以下の作業を各々のプログラムにて実行する。
  1. work ディレクトリに a.txt と 1.txt を作成。
    
    % cd /tmp
    % mkdir work
    % cd work
    % echo "A B C" > a.txt
    % echo "1 2 3" > 1.txt
    
    
  2. import/checkout の作業を行なう。
  3. 1.txt を編集し、status と diff を見る。
    
    % echo "10 11 12" >> 1.txt
    
    
  4. 1.txt の変更をコミット。
  5. a.txt を A.txt に変更し、コミット。
  6. ログを見る。

プログラムのデザインと思想によって、始め方は千差万別だ。各々、特徴的な初期化のやり方をする。しかし、そう何回も繰り返す作業ではない。

一度、使い始めると大切な作業は三つ。

  1. 変更を確認する。
  2. 変更を記録する。
  3. 履歴を見る。
これらの作業が中心となる。コマンド的には、checkout(co)、diff、commit(ci)、update、log、status 等が並ぶ。これらのコマンドがある程度使えると、不自由はしない。

そして集団で使うとなると、更に二つの作業が必要になる。

  1. 他人の変更を引っ張ってくる。
  2. 衝突を解消する。
個人的に使っていても、二つ以上の作業場を用意して、疑似体験することは出来る。大きいプロジェクトや既に安定運用している成果物だと変更箇所も分散される事が多い。また、正しく管理されている仕事であれば衝突を避けるように計画するべきなので、衝突の解消を行なう事自体は少ない。こちらについては、今回は扱っていない。

集中管理型や分散型による違い。各思想の違いもコマンドに現れていて面白い。RCS は単体ファイルのみ。CVS 以降はディレクトリ構成も含めて、ファイルを集合として扱える。新しいい物も RCS/CVS に準拠したコマンド名も多い。使い手としては、コマンドと動作がある程度似ていた方が、試しやすく抵抗感も少ない。欠点としては、RCS/CVS の動作に寄せる形になるので、設計に RCS/CVS の影響が多かれ少なかれ出てくる事だ。

旅程cvsMercurial/hggitSubversion/svnrcssvk

Mercurial/hg short tour2009年02月07日 08時18分05秒


% cd /tmp
% mkdir hgwork
% cd hgwork
% ehco "A B C" > a.txt
% echo "1 2 3" > 1.txt
% hg init
% hg addremove
adding 1.txt
adding a.txt
% hg ci -m '/tmp/hgwork is under mercurial.'
% hg stat a.txt
% hg log a.txt 
changeset:   0:bd583b61ce1a
tag:         tip
user:        uyota@localhost
date:        Sun Feb 07 07:34:00 2009 -0500
summary:     /tmp/hgwork is under mercurial.
% echo "10 11 12" >> 1.txt 
% hg diff 1.txt 
diff -r bd583b61ce1a 1.txt
--- a/1.txt     Sun Feb 07 07:34:00 2009 -0500
+++ b/1.txt     Sun Feb 07 07:37:11 2009 -0500
@@ -1,1 +1,2 @@
 1 2 3
+10 11 12
M 1.txt
% hg status
% hg ci -m 'Added 2 digits numbers.'
% hg rename a.txt A.txt
% hg status
R a.txt
A A.txt
% hg ci -m 'Uppercase.'
% ls -a
.       ..      .hg     1.txt   A.txt
% hg log
changeset:   2:74414cb3510d
tag:         tip
user:        uyota@localhost
date:        Sun Feb 07 07:38:46 2009 -0500
summary:     Uppercase.

changeset:   1:678bfd616c62
user:        uyota@localhost
date:        Sun Feb 07 07:38:00 2009 -0500
summary:     Added 2 digits numbers.

changeset:   0:bd583b61ce1a
user:        uyota@localhost
date:        Sun Feb 07 07:34:00 2009 -0500
summary:     /tmp/hgwork is under mercurial.

旅程cvsMercurial/hggitSubversion/svnrcssvk

NetBeans のリファクタリングコピー2008年12月01日 16時10分54秒

NetBeans でファイルを「コピー」した後に、「パッケージ」を選択しすると「ペイスト」「リファクタリングコピー」が出来る。これは、ファイルを複製し、クラスの名前だけを変えて新しいクラスを作る。

しかし、これが「バージョン管理」を行っていると相性が良くない。元もと、ファイル名の変更や、ファイルのコピーをサポートしていない CVS なら、直接的な問題にはならない。しかし、Subversion や Mercurial などの、これらの変更を追うプログラムだと、NetBeans をとおして変更を行うと、これらの履歴が記録されない。

そこで、ファイル名を変更したり、ファイルをコピーする場合には、コマンドラインにて、svn copy FileA.java FileB.javahg rename FileC.java FileD.java の様に、呼び出した方が良い。NetBeans からのバージョン管理は、これらのプログラムからの出力を GUI を用いて表示しているだけなので、何ら問題は無い。また、NetBeans がファイルの出現、消滅を検知してくれるので、こちらの問題もない。

このやり方だと、NetBeans がクラス名などを変更してくれなくなるので、コンパイルは失敗するようになる。しかし、基本的にコンパイルエラーを元に簡単に修正できる。それよりも、履歴を正しく記録できないことの方が、悩みは大きい。