Xcode で SCM を使ってみる
これからプログラミングを始めようと思ったのだけど、 やっぱりソースコード管理(バージョン管理)をしないといけないだろう。 去年まで作っていたプロジェクトはそこんところ何もしていなかったので、 いざという時に結構苦労したからだ。
Subversion を使って Xcode の SCM を利用する
まずはターミナル (Terminal) で Subversion のリポジトリを作らなければならない。 居間と寝室の 2 台のパソコンからリポジトリにアクセスしたかったので、 Time Capsule に接続した USB ハードディスク(Pearl)に作成することにした。
まずは Finder で Pearl にアクセスしてマウントしておく。 ターミナルからは
/Volumes/Pearl
でアクセスすることができる。$ sudo svnadmin create /Volumes/Pearl/SVNRepository
ディレクトリを作成でエラー
次に「SCM」>「リポジトリ」でリポジトリにプロジェクトのディレクトリを作成する。
リポジトリウィンドウで SVN Pearl リポジトリを選択して「ディレクトリを作成」ボタンをクリックする。 しかしなぜかエラーになってしまう。
エラー:45(Operation not supported)説明:Can't get exclusive lock on file '/Volumes/Pearl/SVNRepository/db/txn-current-lock': Operation not supported
ネットを検索したところ、
どうやら SVN がファイルロックをかけようとするのだが、
ネットワークドライブがロックに対応していないせいらしい。
リソースを提供するサーバが FreeBSD とか Linux 等であれば、
lockd
/statd
を起動しておくとか、
ネットワークドライブは使わずに svnserve
や ssh
を使えばいいそうなのだが、
相手が Time Capsule ではどうしようもない。
どうも Subversion ではなくて CVS ならネットワークドライブでもうまくいくらしい。
しかし今更 CVS はないかー。 とも思ったのだがサーバマシンを用意することも出来ないので、 おとなしく CVS を使うことにする。 使ってないノートパソコン (Sony VAIO C1XE とか Hitachi の Chandra とか) もあるにはあるのだが… さすがにサーバ用途には向いていまい。
CVS を使って Xcode の SCM を利用する
Subversion と同様にリポジトリを作る。
$ cvs -d /Volumes/Pearl/Repository init
-
次にバージョン管理したくないファイルを登録する。
-
リポジトリから管理ファイルディレクトリ
CVSROOT
をチェックアウトする。$ cvs -d /Volumes/Pearl/Repository co CVSROOT cvs checkout: Updating CVSROOT U CVSROOT/checkoutlist U CVSROOT/commitinfo U CVSROOT/config U CVSROOT/cvswrappers U CVSROOT/loginfo U CVSROOT/modules U CVSROOT/notify U CVSROOT/postadmin U CVSROOT/postproxy U CVSROOT/posttag U CVSROOT/postwatch U CVSROOT/preproxy U CVSROOT/rcsinfo U CVSROOT/taginfo U CVSROOT/verifymsg $
-
バージョン管理の対象から外すファイルのパターンを
CVSROOT/cvsignore
に書き出す。$ cd CVSROOT $ cat <<EOT > cvsignore .DS_Store ._* *.app *.build *.pbxindex *.pbxuser *.mode1v3 build EOT $
-
cvsignore
をリポジトリに追加する。$ cvs add cvsignore cvs add: scheduling file `cvsignore' for addition cvs add: use `cvs commit' to add this file permanently $ cvs commit -m 'cvsignore is modified for Mac OS X development' cvs commit: Examining . /Volumes/Pearl/Repository/CVSROOT/cvsignore,v <-- cvsignore initial revision: 1.1 cvs commit: Rebuilding administrative file database $
-
取り出した管理ファイルのコピーを削除する。
$ cd .. $ cvs release -d CVSROOT You have [0] altered files in this repository. Are you sure you want to release (and delete) directory `CVSROOT': y $ ls CVSROOT ls: CVSROOT: No such file or directory $
-
リポジトリに新しいプロジェクトを作る
作成したリポジトリに新しいプロジェクトを追加してみる。
-
ディレクトリをチェックアウト
作成したディレクトリに新規プロジェクトを作成するため、 ディレクトリをチェックアウトする。
作成したディレクトリを選択して、 チェックアウトボタンをクリック。
-
「ファイル」>「新規プロジェクト...」を選択してプロジェクトを作る。
プロジェクトを作る場所はリポジトリのディレクトリをチェックアウトした場所。 そのためディレクトリがすでに存在するので置き換えてもいいか確認するダイアログが表示されるので、 置き換えをクリック。 チェックアウトしたディレクトリには CVS の管理用の
CVS
サブディレクトリがある。 しかし置き換えをクリックしても削除されないので大丈夫。 -
後はいつもと同じようにプログラムを作成すれば OK である。
リポジトリに変更を反映する
一通りプログラムが完成したら、 新規に作成したプロジェクト、 ファイルをリポジトリに反映する。
先ずプロジェクトを選択して「ファイル」>「情報を見る」を選択し、 プロジェクトの情報を表示する。
「ルートと SCM を構成...」をクリックして、 プロジェクトルートと SCM を設定する。 SCM は CVS を選択する。
選択すると自動的にリポジトリの値が、 推奨のリポジトリに設定される。
OK ボタンをクリックするとプロジェクト情報ウィンドウに 「SCM」 タブが追加される。
-
次に、作成したプロジェクトとファイルをリポジトリに追加する。
「SCM」>「SCMの結果」を選択すると、 新規に作成したプロジェクトとファイルの一覧が表示される。
-
これらをすべて選択して、 「SCM」>「リポジトリに追加」を選択する。
すると、 状況が不明(?)だったファイルの状況が追加マーク(A)になる。
ここではマークがついただけで、 まだ実際には追加されたわけではない。 他にも修正マーク(M)なんてのがつく場合もある。
-
これらの状況をリポジトリに反映させるには、 変更をコミット(commit)すればよい。
ここでは「SCM」>「プロジェクト全体をコミット...」を選択する。
-
リポジトリの情報を再度読み込んだところ
リポジトリにコミットした状態を確認するには、 「SCM」>「リポジトリ」 でリポジトリウィンドウを表示して、 「再度読み込む」 ボタンをクリックする。
以上が、 リポジトリにディレクトリを追加してからプロジェクトを作成し、 それらのファイルをリポジトリに追加する方法である。
逆に、 プロジェクトを作成してから、 それをリポジトリに読み込ませる方法もある。 が、 それはまたの機会に。
2010/3/7 追記: バージョン管理から除外するファイルを指定する手順を追記。