FreeBSD 8-CURRENT with USB2 を試した2009年02月12日 08時00分18秒

現在 FreeBSD 8-CURRENT では、新しい USB の実装に移るための作業が活発に行なわれている。自分は安定指向なのだと自分に言い聞かせつつ、微力でも助けになればと思い、8-CURRENT を試してみた。予備環境で試す。

新しい USB の実装は便宜上 USB2 と呼ばれている。実はこの名称自体も USB 自体の規格の USB 2.0 と似ているのでややこしいと言う人もいる。十分なサポートが確保された後に、今使われている USB2 と言うのは USB に変換されてしまうので、過渡期の間だけの名前だと思っていい。

USB2 を試したいのであれば、GENERIC とは別に用意されている USB2 のカーネル設定を使う。具体的には、make KERNCONF=USB2 buildkernel installkernel などとして使う。

取り敢えず、試した USB は 2.5in の外付けハードディスクとマウスだけだが、問題なく動いた。もしかしたら動かないのではとの心配もあったが、杞憂に終わった。まだ、幾つか他にも USB 機器はあるので折をみて試していこうと思う。

git add/commit/diff の動作2009年02月12日 17時58分37秒

以前にも git のインターフェースは他と同じ名前なのに動作が違うのは指摘した。似て非なる物の為、更にとっつきが悪い。git heckout もその一例だ。

git の add と commit の動作も他とは全く異なる。

非 git での add は、新しいディレクトリやファイルを追加するのに使われる。非 git での commit は引数に指定されたファイルをコミットするのに使われる。そして、diff はこの手元での変更を表示する。様々なオプションを指定すればタグなどとの比較も可能だが、ここで言いたいのは何もオプションを与えないときの動作のことだ。

git では、全てのコミットを事前に add する必要がある。git の add はディレクトリやファイルを追加するのではなく、変更をコミットする為の予約をするコマンドだ。そして、commit であらかじめ登録しておいた変更のうち、引数で渡されたファイルのみの差分をコミットする。commit には add が必須だ。そして、diff コマンドは、手元の変更で add されていない物のみを表示する。そのため、git add が終わった変更は、git diff にて表示されない。

hg で例をあげる。


% hg init
% echo A > file.txt
% hg add file.txt 
% hg commit -m 'Create file.txt.'
% echo B >> file.txt 
% hg diff
diff -r d3e5d96de93f file.txt
--- a/file.txt  Fri Feb 11 23:10:27 2009 -0500
+++ b/file.txt  Fri Feb 11 23:11:42 2009 -0500
@@ -1,1 +1,2 @@
 A
+B
% hg add file.txt 
file.txt already tracked!

二度目の file.txt の add は出来ないと言われる。

今度は git で試す。


% git init
Initialized empty Git repository in /tmp/git/.git/
% echo A > file.txt
% git add file.txt 
% git commit -m 'Create file.txt'
Created initial commit 58d0fcc: Create file.txt
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 file.txt
% echo >> B file.txt 
% git diff
diff --git a/file.txt b/file.txt
index f70f10e..35d242b 100644
--- a/file.txt
+++ b/file.txt
@@ -1 +1,2 @@
 A
+B

ここでは、diff が表示される。

% git commit -m 'Added B.'
# On branch master
# Changed but not updated:
#   (use "git add ..." to update what will be committed)
#
#       modified:   file.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

しかし、これはコミットできない。

% git add file.txt 
% git diff
% git commit -m 'Added B.'
Created commit 9f0a6ac: Added B.
 1 files changed, 1 insertions(+), 0 deletions(-)

add を使い登録することで、コミットが受け付けられた。そして、diff では変更を見られなくなっている。