連載
» 2002年07月13日 00時00分 公開

Apache 2.0でWebDAV(後編):Subversionによるバージョン管理 (3/3)

[宮本久仁男,NTTデータ]
前のページへ 1|2|3       

Subversionの利用

 Subversionの基本的な使い方は「次世代プロトコルWebDAVの可能性」の後編で紹介したものとほとんど変わりません。ただし、Subversionで実装されたメソッドが増加しているのに伴い、機能が増えています。

 増えた機能は、svnコマンドでどのようなサブコマンドが増えたのかを見ることで、簡単にチェック可能です。増えたものも含め、svnコマンドで使用可能なサブコマンドを下表に示します。

コマンド 書式 機能
add add [TARGETS] 新しいファイルをバージョンコントロール対象に追加する
co checkout REPOSPATH1 [REPOSPATH2 REPOSPATH3...] 指定したURLにあるリポジトリの内容を作業ディレクトリにチェックアウトする
cleanup cleanup [TARGETS] TARGETSについて、作業用コピーのクリーンアップやロックの除去、そのほか終了していない操作などの後始末を再帰的に実行する
ci commit [TARGETS] 作業ディレクトリの変更内容をリポジトリにコミットする
copy copy SRC DST SRCからDSTへリソースをコピーする。SRCとDSTには、URLあるいはローカルのWC(ワーキングコピー)を指定可能
delete delete [TARGETS] 指定したファイルやディレクトリをバージョンコントロール対象から外す
diff diff [TARGETS] TARGETSについて、ローカルファイルの変更点をdiff形式で出力する
help help [SUBCOMMAND1 [SUBCOMMAND2] ...] ヘルプメッセージを表示する
import import REPOS_URL [PATH] [NEW_ENTRY_IN_REPOS] 指定したファイルもしくはディレクトリツリーをリポジトリにインポートする
info info [PATH1 [PATH2] …] PATHで指定したWCに関する情報を表示する
log log [URL] [PATH1 [PATH2] …] URLやPATH1などで指定したリソースの履歴を見る
merge merge PATH1[@N] PATH2[@M] PATH1とPATH2の差分をカレントディレクトリのWCに反映する
mkdir mkdir [NEW_DIR | REPOS_PATH] NEW_DIRで指定したディレクトリをWCに作成するか、REPOS_URLで指定したコレクションを作成する
propdel propdel PROPNAME [TARGETS] TARGETSについて、PROPNAMEで指定した名前のプロパティを削除する
propedit propedit [PROPNAME] [TARGETS] TARGETSのプロパティの中で、PROPNAMEで指定した名前のプロパティを編集する
propget propget PROPNAME [TARGETS] TARGETSにおいて、PROPNAMEで指定した名前のプロパティの値を取得する
proplist proplist [TARGETS] TARGETSで指定したファイルやディレクトリのプロパティ一覧を表示する
propset propset PROPNAME [PROPVAL | --valfile VALFILE] [TARGETS] TARGETSにおいて、PROPNAMEで指定した名前のプロパティに値PROPVAL(もしくはVALFILEに記述された値)を設定する
revert revert [TARGETS] TARGETSについて、元の作業ファイルを復旧する(ローカルファイルに対するすべての操作をアンドゥする)
resolve resolve TARGET1 [TARGET2 [TARGET3 ... ]] TARGET1 (, TARGET2, TARGET3,…) において発生したconflictの状態を除去する
status status [TARGETS] TARGETSについて、作業用コピーファイルやディレクトリの状態を出力する
switch switch [TARGET] REPOSPATH (TARGETで指定したWCに)REPOSPATHで指定した内容をアップデートする
update update [TARGETS] TARGETSについて、リポジトリから作業用のコピーに変更を反映する
表 svnコマンドで使用可能なサブコマンド

 なお、サブコマンドは仕様が変更されているところもあります。例えば、ciコマンドなどを使用する前に環境変数SVN_EDITOR、VISUALもしくはEDITORを指定しておかないと、svnコマンドはエラーを出力します。これらの環境変数には、普段使用するエディタを指定しておくか、もしくは使わないで済むように-mなり-Fなりでコメントを指定するようにしましょう。

簡単なSubversionの使用例

 チェックアウト→編集→チェックインという一連の流れを以下に示します。

  • チェックアウト

 サブコマンドcoを使って、チェックアウトします。チェックアウト対象となるデータは、あらかじめimportサブコマンドを使用してリポジトリに格納しておきます。すでに何度かチェックインを繰り返しているため、Revisionは9になっています。

$ svn co http://localhost/svn/repos/
A  repos/public_htmltestmkdirs
A  repos/testmkdir
A  repos/public_html
A  repos/public_html/count.html
(中略)
A  repos/public_html/ml
A  repos/public_html/ml/wwwmail.txt.1
A  repos/public_html/ml/jcode.pl
A  repos/public_html/ml/wwwmail.htm
A  repos/public_html/ml/mimew.pl
Checked out revision 9.
  • チェックイン

 チェックアウトされたファイルのうち、repos/public_html/count.htmlを編集してチェックインします。

$ svn ci repos/public_html/count.html
 
svn_error: #21124 : <No external editor available>
  Commit failed (details follow):
 
svn_error: #21124 : <No external editor available>
  Could not use external editor to fetch log message; consider 
 
setting the $SVN_EDITOR environment variable or using the 
--message (-m) or --file (-F) options.
 
svn_error: #21124 : <No external editor available>
  None of the environment variables SVN_EDITOR, VISUAL or EDITOR is
 set.

 環境変数EDITORを設定して正しくciサブコマンドが実行されると、画面3のようにコメントの編集ができます。

画面3 コメント編集画面 画面3 コメント編集画面

 コメントの編集を終了してエディタを終了させると、

Sending        repos/public_html/count.html
Transmitting file data .
Committed revision 10.

などと、リポジトリを更新することが可能です。

  • 履歴の確認

 ciで付加したコメントは、サブコマンドlogで参照できます。以下に、ローカルマシンのリポジトリに対するサブコマンドlogの実行結果と、Subversionサーバ上にあるリソースに対するサブコマンドlogの実行結果を示します。rev 10のところで、先ほどのサブコマンドci実行時に編集したコメントが入ってるのが分かると思います。ユーザーがanonymousになっているのは、特にユーザーを指定しないでsvnコマンドを実行したためです。

$ svn log repos/public_html/count.html
---------------------------------------------------------------------
rev 10:  anonymous | Tue 2 Jul 2002 16:01:18 | 4 lines
 
 
 This is a commit test
---------------------------------------------------------------------
rev 1:  anonymous | Tue 25 Jun 2002 17:28:46 | 2 lines
 
 
---------------------------------------------------------------------
$
 
$ svn log http://localhost/svn/repos/public_html/count.html
---------------------------------------------------------------------
rev 10:  anonymous | Tue 2 Jul 2002 16:01:18 | 4 lines
 
 
 This is a commit test
---------------------------------------------------------------------
rev 1:  anonymous | Tue 25 Jun 2002 17:28:46 | 2 lines
 
 
---------------------------------------------------------------------

 なお、Subversionサーバ上のリポジトリに対してサブコマンドlogを実行した場合、REPORTメソッドが発行されますが、この結果はOPTIONSの結果中のAllowメソッドには表れません。この時点でaccess_logに記録されたメソッドを以下に示します。

127.0.0.1 - - [03/Jul/2002:01:04:00 +0900] "REPORT /svn/repos 
HTTP/1.1" 200 2982
  • ほかのワーキングコピーの更新

 Subversionサーバからローカルマシンに転送したリポジトリを「ワーキングコピー」といいます。ほかの人が作業した履歴を自分の持つワーキングコピーに反映させたい場合は、サブコマンドupdateを利用します。例えば、以下のような形でアップデートが行われたコンテンツのみを持ってくることが可能です。

$ svn update repos/public_html
A  repos/public_html/testmkdirs
U  repos/public_html/count.html
U  repos/public_html/master.html
U  repos/public_html/zebedee/public_html/count.html
U  repos/public_html/zebedee/public_html/index.html
Updated to revision 10.

Version 1.0を控えて

 Apache 2.0が正式リリースとなり、DeltaVがRFC 3253としてリリースされ、Subversionもpre-alphaのフェイズに入っています。Subversionも、最初に紹介したころと比べると機能が増え、着実に実用に近づいている(Subversionの開発ではすでに実用になっていますが)といえましょう。

 Version 1.0がリリースされるその日に備えて、皆さんもこの実装に慣れ親しんでみませんか?

参考資料

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。