« 入門Ajax 増補改訂版 | メイン | 日本語版TracをMac OSXにインストールする »

Subversionのインストールと使い方

そろそろ必要だなと思い、バージョン管理ソフトSubversionを試してみました。環境はMac OSX 1.4.8。

インストール

Darwinportsでインストール

# port install subversion

リポジトリの作成

svnadminでリポジトリを作成。

# cd /Users/myuser/
# mkdir svn
# cd svn/
# svnadmin create repos
# ls -la /Users/myuser/svn/repos/
total 16
drwxr-xr-x 9 root myuser 306 1 9 00:46 .
drwxr-xr-x 4 root myuser 136 1 9 00:46 ..
-rw-r--r-- 1 root myuser 229 1 9 00:46 README.txt
drwxr-xr-x 5 root myuser 170 1 9 00:46 conf
drwxr-xr-x 2 root myuser 68 1 9 00:46 dav
drwxr-sr-x 10 root myuser 340 1 9 00:46 db
-r--r--r-- 1 root myuser 2 1 9 00:46 format
drwxr-xr-x 11 root myuser 374 1 9 00:46 hooks
drwxr-xr-x 4 root myuser 136 1 9 00:46 locks

リポジトリに「svn://〜」でアクセスするためにsvnserveを設定。

# cp /Users/myuser/svn/repos/conf/svnserve.conf /Users/myuser/svn/repos/conf/svnserve.conf.orig
# vi /Users/myuser/svn/repos/conf/svnserve.conf
[general]
anon-access = read
auth-access = write
password-db = passwd
realm = My First Repository

パスワードを設定しておく。※平文なのでパーミッションに注意すること。

# vi /Users/myuser/svn/repos/conf/passwd
[users]
# harry = harryssecret
# sally = sallyssecret
myuser = testpasswd

ターミナルの文字コードはUTF-8にしておく。クライアント側の表示設定も変更しておくこと。OSX標準のターミナルの場合は、[ターミナル→ウィンドウ設定→文字コードエンコーディング]で「Unicode(UTF-8)」を選択。

# setenv LANG ja_JP.UTF-8

svnserveを起動する。

# svnserve -d


ごく簡単なチュートリアル

以下は実際の作業を想定した操作方法チュートリアル。のつもり。

構成元ディレクトリ・ファイルを用意

# mkdir /Users/myuser/tmp
# cd /Users/myuser/tmp/
# mkdir trunk
# mkdir branches
# mkdir tags

trunk、branches、tagsという三つのディレクトリを作成するのが一般的らしいので取りあえず作っておきました。ここではディレクトリだけですがファイルも含めることができます。

構成元ファイルをリポジトリに追加する。-mで適当なコメントを添えることができる。

# setenv SVN_EDITOR vi
# svn import /Users/myuser/tmp/ svn://localhost/Users/myuser/svn/repos -m "initial import"
認証領域: My First Repository
'root' のパスワード:
認証領域: My First Repository
ユーザ名: myuser
'myuser' のパスワード:

追加しています /Users/myuser/tmp/trunk
追加しています /Users/myuser/tmp/branches
追加しています /Users/myuser/tmp/tags

リビジョン 1 をコミットしました。

※初回だけ、ここで「svnは、キーチェーン"X509Anchors"を使用する必要があります。」というダイアログが出てパスワード入力を求められましたが何のパスワードを入力すべきかよくわかりませんでした。入力エラーを何度か間違えたところエラーとしてそのま進んだので取りあえず放置。(´・ω・`)

注意点。

データをインポートした後でも、もとのツリーがバージョン 管理下に入ったわけではないのに注意し てください。作業を始めるには、まずそのツリーのための新しい作業コ ピーをsvn checkoutコマンドで作る必要が あります。「Subversion によるバージョン管理」より

とのことですが、これがわからずしばらく混乱しました。importしたディレクトリはsubversionの管理下に入ったわけではないようです。

作業コピー 用ディレクトリの作成

# mkdir /Users/myuser/workspace

チェックアウトでリポジトリのデータを作業ディレクトリに持ってくる。

# cd /Users/myuser/workspace
# svn co svn://localhost/Users/myuser/svn/repos/
A repos/trunk
A repos/branches
A repos/tags
リビジョン 1 をチェックアウトしました。

以後、作業コピーである「/Users/myuser/workspace/repos」以下のファイルを更新していきます。内容が確定したらリポジトリにチェックイン(=コミット)していきます。svn ***系の操作コマンドはこの作業コピーのディレクトリ以下でしか使えないようです。

ファイルを作成する。

# /Users/myuser/workspace/repos
# echo "subversion test1" > trunk/test1.txt
# echo "subversion test2" > trunk/test2.txt
# svn add trunk/test1.txt
A trunk/test1.txt
# svn add trunk/test2.txt
A trunk/test2.txt

チェックインでリポジトリのバージョンを上げる。上記のように、svn addで明示的に追加しないとチェックインしてもリポジトリに入らない。ファイルやディレクトリの追加、削除、移動を行った場合には常にsvn ***を実行する必要がある。

# svn ci -m "2files generated"
追加しています trunk/test1.txt
追加しています trunk/test2.txt
ファイルのデータを送信中です..
リビジョン 2 をコミットしました。

ファイルを編集する。

# vi trunk/test1.txt
subversion test1
ktkr!!
# svn ci -m "test1.txt modified"
送信しています trunk/test1.txt
ファイルのデータを送信中です.
リビジョン 3 をコミットしました。

基本的な流れはこんな感じのようです。

使い方

上記ではリポジトリからローカルにコピーしたファイルを編集してチェックインしていますが、リポジトリのデータを直接操作することもできます。
以下は、リポジトリに直接アクセスしてディレクトリのmoveを行っています。

# svn mv svn://localhost/Users/myuser/svn/repos/tags svn://localhost/Users/myuser/svn/repos/tags2 -m "rename tags dir"

リビジョン 4 をコミットしました。

このように、リポジトリのデータが書き換えられた場合にローカルの作業コピーと同期をとる必要があります。こんな感じです。

# svn update
D tags
A tags2
リビジョン 4 に更新しました。

現在の変更状況とリポジトリとの比較もできます。

# vi trunk/test1.txt
subversion test1
ktkr!!
uhawwww okwwww
# svn diff
Index: trunk/test1.txt
===================================================================
--- trunk/test1.txt (リビジョン 4)
+++ trunk/test1.txt (作業コピー)
@@ -1,2 +1,3 @@
subversion test1
ktkr!!
+uhawwww okwwww

trunk/test1.txtの最後の行が追加されていることがdiffの結果からわかります。

ファイルの変更履歴の確認はこんな感じ。

# svn log trunk/test1.txt
------------------------------------------------------------------------
r3 | myuser | 2007-01-09 01:31:06 +0900 (火, 09 1 2007) | 1 line

test1.txt modified
------------------------------------------------------------------------
r2 | myuser | 2007-01-09 01:28:44 +0900 (火, 09 1 2007) | 1 line

2files generated
------------------------------------------------------------------------

リポジトリから任意のリビジョンのデータを出力することもできます。

# mkdir /tmp/oops/
# svn export svn://localhost/Users/myuser/svn/repos -r 3
A repos
A repos/trunk
A repos/trunk/test2.txt
A repos/trunk/test1.txt
A repos/branches
A repos/tags
リビジョン 3 をエクスポートしました。

exportした場合は、チェックアウトとは異なり作業コピーにはならないようです。このディレクトリのファイルを更新してsvn ***コマンドを使っても何もおきません。


その他、いろんな事ができるようです。
駆け足でSubversionを試してみましたが、なかなか面白かったかも。

About

2007年01月09日 01:55に投稿されたエントリーのページです。

ひとつ前の投稿は「入門Ajax 増補改訂版」です。

次の投稿は「日本語版TracをMac OSXにインストールする」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。