Hatena::ブログ(Diary)

gan2 の Ruby 勉強日記 このページをアンテナに追加 RSSフィード

この日記のはてなブックマーク数 PV/ 870413 Subscribe with livedoor Reader 役立つリンク集

2007-07-04

Subversionの導入

昨日はSubversionの勉強よりもRubyの方を優先してやりたい。

みたいないことを言っていたのだけど、

やっぱりソースをがりがり書くなら、

バージョン管理は大切だろう!ってことで、

Rubyのコード書きより先に、Subversionについて勉強した。


Subversion によるバージョン管理404 Not Foundあたりを少し読んだ後に、

今日買ったWEB+DB PRESS Vol.39の特集記事を読んだら、

大体分かった気になった。

Web+DB Pressの特集がかなり分かりやすかったので、

これを読むだけでもよかったかもしれない。

Subversionの導入を考えている人にはお勧めです。


インストール

で、導入どうにゅう。

まずは、 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

それぞれのディレクトリの役割は以下のような感じ。

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


リビジョンとは、リポジトリの状態を番号で表したもの。

リポジトリを作ったときは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カテゴリを作ったので、

これ以上のことは時間があるときに書いていこうと思う。

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)))))

参考

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

Meadow再起動せずに、.emacsの変更を反映させるためには、

.emacsを編集しているバッファで以下のコマンドを入力すればよい。

M-x eval-current-buffer

今までずっと再起動してた。

考えてみればこれってめちゃめちゃ面倒だったね('A`)


追記

M-x load-file RET ~/.emacs

とする方法もあるみたい。

この方法なら.emacsを開いているバッファに移動しなくても済む。

使い分けられるとイイかもね。

参考

カスタム編 Emacs .emacsの修正を更新したい | eyesrobe

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