.emacs を再読み込みする方法

Meadowを再起動せずに、.emacsの変更を反映させるためには、
.emacsを編集しているバッファで以下のコマンドを入力すればよい。

M-x eval-current-buffer

今までずっと再起動してた。
考えてみればこれってめちゃめちゃ面倒だったね('A`)

追記

M-x load-file RET ~/.emacs

とする方法もあるみたい。
この方法なら.emacsを開いているバッファに移動しなくても済む。
使い分けられるとイイかもね。

「2ちゃんねるはなぜ潰れないのか? 」を読みたい

2ちゃんねるはなぜ潰れないのか? (扶桑社新書)

2ちゃんねるはなぜ潰れないのか? (扶桑社新書)

すごく面白そう。

local varibales list の警告を出さないようにする

昨日から、ChangeLogにメモを書こうとすると、
以下のような警告が出されるようになった。

The local variables list in ChangeLog.txt
contains values that may not be safe (*).

Do you want to apply it?  You can type
y  -- to apply the local variables list.
n  -- to ignore the local variables list.
!  -- to apply the local variables list, and permanently mark these
      values (*) as safe (in the future, they will be set automatically.)

    mode : change-log
  * clmemo-mode : t

local variables listっていうのはたぶん、
あるファイル(僕の場合はChangeLog.txt)の中にある、
他では使われていない変数の入ったリストのことだろう。
上記の警告はそれについてどうしましょうか?と
ユーザに対して聞いてくれているんだと解釈。
そういえば、昨日はEmacs Lispのメモを取ったから、
いくつかそれらしいリストが書き込まれているな。
納得であります。


次からはそのリストを安全だと見なして、
警告は出さないようにするには!を選べばいい。
そうすると、.emacsの末尾に、ある設定が追加される。
なんか見づらいので適当に加工して書き直したのが以下。
この記述があればもう警告は出ない。

;; local varibales list の警告を出さないようにする
(custom-set-variables
 '(safe-local-variable-values (quote ((clmemo-mode . t)))))

Subversionの導入

昨日はSubversionの勉強よりもRubyの方を優先してやりたい。
みたいないことを言っていたのだけど、
やっぱりソースをがりがり書くなら、
バージョン管理は大切だろう!ってことで、
Rubyのコード書きより先に、Subversionについて勉強した。


Subversion によるバージョン管理http://www-aos.eps.s.u-tokyo.ac.jp/~takagi/SubversionMemo.htmlあたりを少し読んだ後に、
今日買ったWEB+DB PRESS Vol.39の特集記事を読んだら、
大体分かった気になった。
Web+DB Pressの特集がかなり分かりやすかったので、
これを読むだけでもよかったかもしれない。
Subversionの導入を考えている人にはお勧めです。

WEB+DB PRESS Vol.39

WEB+DB PRESS Vol.39

インストール

で、導入どうにゅう。
まずは、subversion: Documents & files: Windows Binariesから
Subversionの最新版*1をダウンロードする。
インストールは特に気にすることはない。
僕は新しいソフトは、C:じゃなくてD:にインストールするようにしてるので、
そこだけ変更して後はデフォルト。


インストールできたらコマンドプロンプトから、

> svn help

を実行してインストールがうまくいったか確認する。
ヘルプが日本語で出てきてくれるなんて幸せですよおまいさん。
Subversionで普段行う作業では、
svn を頭につけた svn コマンドを使うらしい。

リポジトリの作成

次にリポジトリを作る。
バージョン管理はリポジトリごとに行われる。
とりあえずテスト用のリポジトリを1つ新しく作ってみる。
この場合は、svnコマンドではなく svnadmin コマンドを使う。
リポジトリの作成は重要なのだね。

> svnadmin create file:///C:/svn/rep

なお、このコマンドを実行するには、
あらかじめ C:\svn\rep ディレクトリを作っておく必要がある。
コマンド実行後、何も出力されなければ成功。
ちなみに、ここで作ったテスト用のリポジトリを消したい場合は、
svnを経由せずにディレクトリごと丸ごと消してしまえばいいらしい。
以下の3つを読んで消し方についての安心感を得た。

リポジトリの消し方が分かれば、心置きなくいじれるってもんだ。

インポート

リポジトリにバージョン管理させる対象を登録することをインポートという。
とりあえず C:\home\gan2\import ディレクトリを作成し、
その中の構成を以下のように設定する。

C:\home\gan2\import
│└ trunk
|  └ hoge.txt
├ tags
└ branches

hoge.txtの内容は以下のようにしておいた。

hoge
fuga
piyo

Subversionでは、バージョン管理の対象となるディレクトリの構成を、
trunk、tags、branchesとすることを推奨している。(参考: bluegate.org - このウェブサイトは販売用です! -&nbspbluegate リソースおよび情報
それぞれのディレクトリの役割は以下のような感じ。

trunk メインの開発用ディレクト
tags 変更することのないある時点のバージョンを管理するディレクト
branches メインから分岐したディレクト


そして、作成した C:\home\gan2\import ディレクトリを、
C:\svn\rep リポジトリにインポートする。
C:\home\gan2\import に移動後、以下のコマンドを実行する。

C:\home\gan2\import> svn import . file:///C:/svn/rep -m "初めてのインポート"
追加しています              trunk
追加しています              trunk\hoge.txt
追加しています              branches
追加しています              tags
リビジョン 1 をコミットしました。

上記のコマンドは、
.(現在のパス)を file:///C:/svn/rep(リポジトリのURL)に、
-m "初めてのインポート"("初めてのインポート"というメッセージ)
をつけてimport(インポート)する、と読める。
リポジトリのURLには、頭に印を付けないといけないらしい。
今回はローカルディスク上に構築したリポジトリなので、頭に file:/// を付ける。
svnadmin createのときは、
まだSubversionの管理の対象ではなかったから付ける必要がなかったんだね。
頭の印は他にも幾つかあるみたい。(参考: bluegate.org - このウェブサイトは販売用です! -&nbspbluegate リソースおよび情報


リビジョンとは、リポジトリの状態を番号で表したもの。
リポジトリを作ったときは0で、コミットをすると1増える。

チェックアウト

インポートをしたからといって、
このまま C:\home\gan2\import で作業をしてはいけない。
なぜなら、C:\home\gan2\import以下のディレクトリやファイルは
バージョン管理の対象となっていないからだ。
作業を始めるにはチェックアウトをしなくてはならない。
チェックアウトとは、バージョン管理の対象となっている
ディレクトリやファイルを取り出すことをという。
また、チェックアウトして作った作業領域のことを作業コピーという。


チェックアウトは、今の C:\home\gan2\import からではできないので、
別の場所に移ってから行うか、
C:\home\gan2\import 以下を一旦削除してから行う。
今回は同じ場所で続けて作業をしたいので、
C:\home\gan2\import を一旦全て削除した。


削除後に、チェックアウトをするため以下のコマンドを実行する。

C:\home\gan2\import> svn checkout file:///C:/svn/rep ./
A    trunk
A    trunk\hoge.txt
A    branches
A    tags
リビジョン 1 をチェックアウトしました。

これで、カレントディレクトリにリポジトリの最新情報を
持ってくることができた。A はAddの頭文字。

作業コピーとリポジトリの比較

hoge.txtを編集して以下のように書き換えてみる。
hoge を hogehoge に変更。

hogehoge
fuga
piyo

そして作業コピーとリポジトリにある最新リビジョンを比較してみる。

C:\home\gan2\import> svn status
M      trunk\hoge.txt

M はModifiedの略。これでhoge.txtに変更があったことが確認できた。


作業コピーに hoge2.txt を追加してみる。
それから svn status コマンドを叩いてみると・・・

C:\home\gan2\import\trunk> svn status
?      hoge2.txt
M      hoge.txt

hoge2.txt には M ではなく ? が付いている。
リポジトリが hoge2.txt のことを、
まだバージョン管理の対象としていないためこうなる。
新しく作成したファイル(ディレクトリ)を、
バージョン管理の対象とするには、
svn add コマンドを使う。

C:\home\gan2\import\trunk>svn add hoge2.txt
A         hoge2.txt

コミット

作業コピーに行った変更をリポジトリに反映させるためには、コミットを行う。

C:\home\gan2\import\trunk>svn commit -m "コミット!!"
送信しています              trunk\hoge.txt
追加しています              trunk\hoge2.txt
ファイルのデータを送信しています ..
リビジョン 2 をコミットしました。

ログ

svn log でリポジトリのログを見ることができる。

C:\home\gan2\import\trunk>svn log
------------------------------------------------------------------------
r1 | gan2 | 2007-07-04 21:42:35 +0900 (水, 04 7 2007) | 1 line

初めてのインポート
------------------------------------------------------------------------

このとき注意しなくてはいけないのが、
svn log で見ることのできるログは、
作業コピーのリビジョンまでだけだということ。
さっきコミットして2になったのは、リポジトリのリビジョンで、
この段階ではまだ作業コピーのリビジョンは1なのだ。
だから svn log で見れるログはリビジョン1まで。
リビジョン2まで見るには、
作業コピーの状態をリポジトリの状態に更新しないといけない。

アップデート

作業コピーの状態をリポジトリの最新状態(HEADという)に
更新するには svn update を使う。

C:\home\gan2\import\trunk>svn update
リビジョン 2 です。

この後 svn log と叩けば、リビジョン2までのログを確認できる。

C:\home\gan2\import\trunk>svn log
------------------------------------------------------------------------
r2 | gan2 | 2007-07-05 13:11:07 +0900 (木, 05 7 2007) | 1 line

コミット!!
------------------------------------------------------------------------
r1 | gan2 | 2007-07-04 21:42:35 +0900 (水, 04 7 2007) | 1 line

初めてのインポート
------------------------------------------------------------------------

リポジトリへの追加、削除、移動

svn add コマンドはリポジトリへファイル(ディレクトリ)を
新しく追加するためのコマンドだった。
追加以外にも削除や移動のためのコマンド svn delete と svn move がある。

その他のこと

Subversionカテゴリを作ったので、
これ以上のことは時間があるときに書いていこうと思う。

*1:2007/07/04現在では svn-1.4.4-setup.exe