コンピュータ / 2008/07/01 (Tue) / 編集 |
さて、以前にFedoraでSubversionしてましたがちょっとしらべたらMacOSXにもSubversionのサーバを立てることができるらしい(しかもプリインストール)ということがわかったので試してみようと思う。
まぁWebサーバに置いたときとちがって「持ち歩いてる」or「常にネット接続状態」じゃないと別のパソコンからはみれないんだがねw
(2008/9/29:「file://」を「URL」に変更、つまりネットワーク越しでも使えるよという意味。)
ちなみにURLというのは「file://~~~」「http://~~~」「svn://~~~」のこと
MacOSX Leopardにはデフォルトでインストールされている
レポジトリには基本的に「branches(デバックや平行開発につかう)」「tags(おそらくバージョンごと保存しとく)」「trunk(メイン、つまり最新)」「working(作業用)」の4つのディレクトリを用意のがいいらしいが別にしたがわなくてもおけ
まぁWebサーバに置いたときとちがって「持ち歩いてる」or「常にネット接続状態」じゃないと別のパソコンからはみれないんだがねw
(2008/9/29:「file://」を「URL」に変更、つまりネットワーク越しでも使えるよという意味。)
ちなみにURLというのは「file://~~~」「http://~~~」「svn://~~~」のこと
Subversionとは
バージョン管理ソフト、CVS(実験で使ったよね?)の仲間、CVSと違ってディレクトリの移動とかファイルの削除とかできる。 つまりディレクトリ構成とか決めてないうちに見切り発車できる。MacOSX Leopardにはデフォルトでインストールされている
レポジトリには基本的に「branches(デバックや平行開発につかう)」「tags(おそらくバージョンごと保存しとく)」「trunk(メイン、つまり最新)」「working(作業用)」の4つのディレクトリを用意のがいいらしいが別にしたがわなくてもおけ
コマンド
まずはどんなコマンドがあるか調べてみた- svnadmin Subversionの管理コマンド、レポジトリを作ったりとかそんなん
- svn Subversionのクライアント、ソースコードをcheckoutしたりcommitしたり
- svnserve Subversionのサーバを立てる、Macがネットからアクセスできる状態になっているなら「svn://」でレポジトリにアクセスできるようになる(らしい)
- svndumpfilter dumpするときにフィルタをかけられるらしい
- svnversion レポジトリのバージョンを調べれるらしい
- svnlook レポジトリに関するいろんな情報(authorとかinfoとかlogとか)がみれるらしい
- svnsync なんか同期がとれるらしい
レポジトリの作成
好きなとこで「%svnadmin create レポジトリ名」%svnadmin create testrep
以下、ホームディレクトリ(~/)にレポジトリを作成した前提で話を進めます(つまり上のコマンドで「/Users/ユーザ名/testrep」ができたということ)
ちなみに中身は以下のような感じ
testrep/
+-- README.txt
+-- conf/
| +-- authz
| +-- passwd
| +-- svnserve.conf
+-- dav/
+-- db/
| +-- current
| +-- format
| +-- fs-type
| +-- revprops/
| | +-- 0
| +-- revs/
| | +-- 0
| +-- transactions/
| +-- uuid
| +-- write-lock
+-- format
+-- hooks/
| +-- post-commit.tmpl
| +-- post-lock.tmpl
| +-- post-revprop-change.tmpl
| +-- post-unlock.tmpl
| +-- pre-commit.tmpl
| +-- pre-lock.tmpl
| +-- pre-revprop-change.tmpl
| +-- pre-unlock.tmpl
| +-- start-commit.tmpl
+-- locks/
+-- db-logs.lock
+-- db.lock
Subversionサーバの起動
ローカル環境だけで使うならべつにやらなくてもいい、だがXcodeでSubversionを使いたいときは必要らしい。設定ファイルは「/Users/ユーザ名/testrep/conf」に入っているもの
svnserve.confで環境設定
設定ファイル、とりあえず以下の三つをコメントイン(#を消す)anon-access = read #認証してない人
auth-access = write #認証した人
password-db = passwd
ここで、「read=読み込み専用」「write=読み書き」「none=なんにもできない」の三種類を設定できる。
ちなみに「password-db」は相対パスや絶対パスでファイル指定してもおけ
ディレクトリごとやユーザごとなどの細かいアクセス制御をしたいときは「authz-db = authz」もいれとく
「realm」とやらを入れると「同じrealm名のレポジトリでおなじ認証を行うことができる」らしいがよくわからないので他サイト参照(暇があったら追記します)
passwdにパスワードの設定
以下のようにするとユーザ「myname」のパスワードが「mypasswd」になるmyname = mypasswd
authzでアクセス制御
ディレクトリごとやユーザごとの細かいアクセス制御ができる。だがまだよくわからないのでauthzファイルの書式は他サイト参照(暇があったら追記します)svnserveコマンドでサーバ起動
%svnserve -d
レポジトリにファイルを追加
チェックアウト(checkout)
とりあえず最初はチェックアウト(checkout)%svn checkout file:///Users/ユーザ名/testrep/
#サーバを立てた人は「%svn checkout svn://Subversionのユーザ名@ホスト名/レポジトリの絶対パス」でもいい
%svn checkout svn://Subversionのユーザ名@localhost/Users/ユーザ名/testrep/
「%svn checkout レポジトリのURL」
するとコマンドを実行したディレクトリ内にレポジトリがダウンロードされて来ます (ここではサーバを立てなかったとして進めます)
そのなかにディレクトリやらファイルやらを作る(ここでは「~/temp」内にチェックアウトしたものとして進めます
[~/temp]%cd testrep/
[~/temp/testrep]%mkdir thrunk
[~/temp/testrep]%cd thrunk/
[~/temp/testrep/thrunk]%touch testfile
[~/temp/testrep/thrunk]%cd ../
[~/temp/testrep]%ls
thrunk/
それから「%svn add ファイル名」でレポジトリに追加(add)します
[~/temp/testrep]%svn add thrunk
A thrunk
A thrunk/testfile
2つ追加されました。
コミット(commit)
その後「%svn commit -m 'コメント'」で変更を適用(commit)します。[~/temp/testrep]%svn commit -m 'test commit'
Adding thrunk
Adding thrunk/testfile
Transmitting file data .
Committed revision 1.
これでレポジトリへの登録は完了!、今後も新しいファイルを追加したときはadd、ファイルを書き換えたときはcommitします。
ログ(log)
さて、実際に更新してみようと思います。[~/temp/testrep]%cd thrunk/
[~/temp/testrep/thrunk]%echo 'my name is yosilove' > testfile
[~/temp/testrep/thrunk]%svn commit -m 'edit testfile by me'
Sending thrunk/testfile
Transmitting file data .
Committed revision 2.
更新できた、一応更新ログを見てみます。
[~/temp/testrep/thrunk]%svn log testfile
--------------------------------------------
r2 | e055717 | 2008-07-01 22:13:02 +0900 (火, 01 7 2008) | 1 line
edit testfile by me
---------------------------------------------
r1 | e055717 | 2008-07-01 20:56:11 +0900 (火, 01 7 2008) | 1 line
test commit
-----------------------------------------------
きちんと更新できてるようです。
レポジトリのバックアップ
svnsyncコマンドでレポジトリのバックアップができるらしいまずバックアップ先のレポジトリを作成(例によってホームディレクトリ直下)
%svnadmin create testrep_back
つぎに「testrep_back/hooks/pre-revprop-change」というファイルを作成、中身は「testrep_back/hooks/pre-revprop-change.tmpl」を編集した物でもいいが、今回は以下の内容で作成
%cat testrep_back/hooks/pre-revprop-change
#!/bin/sh
echo 0
実行権限も忘れずに!
%chmod +x testrep_back/hooks/pre-revprop-change
%svnsync initialize file:///Users/ユーザ名/testrep_back file:///Users/ユーザ名/testrep
Copied properties for revision 0.
そのあと「%svnsync sync バックアップ先リポジトリのURL」で同期を取る
%svnsync sync file:///Users/ユーザ名/testrep_back
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
できてるっぽい?
というわけでためしにチェックアウトしてみる
%svn checkout file:///Users/ユーザ名/testrep_back
A testrep_back/thrunk
A testrep_back/thrunk/testfile
Checked out revision 2.
ここで、「バックアップ先のレポジトリは読み出し専用(つまりaddやcommitはできない)」ということに注意
利用方法メモ
- ファイルの情報を見たい 「%svn info ファイル名」
- 過去のデータを取り出したい 「%svn log ファイル名」で過去ログを確認ー>updateやcheckoutで-rオプションを使う
- ファイル構成を変更したい
- ファイルやディレクトリの削除 「%svn delete ファイル名」
- ファイルやディレクトリの移動 「%svn move 移動前ファイル名 移動後ファイル名」
- ファイルやディレクトリのコピー 「%svn copy コピー前ファイル名 コピー後ファイル名」
コマンドとかめんどくせぇ、、、という人は
SCPluginというFinder用プラグインがおすすめPR