Subversionによるバージョン管理:Apache 2.0でWebDAV(後編)(3/3 ページ)
DeltaVと呼ばれていたバージョニング拡張がRFCとしてリリースされたことにより、WebDAVのバージョン管理機能もようやく足元か固まった。以前紹介したSubversionをApache 2.0+WebDAV環境に導入してみよう。
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のようにコメントの編集ができます。
コメントの編集を終了してエディタを終了させると、
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がリリースされるその日に備えて、皆さんもこの実装に慣れ親しんでみませんか?
参考資料
- Subversion HomePage(Subversion Project)
http://subversion.tigris.org/ - Apache HTTP Server Project(Apache 2.0)
http://httpd.apache.org/ - Sleepycat Software(Berkeley DBの配布元)
http://www.sleepycat.com/
Copyright © ITmedia, Inc. All Rights Reserved.