Subversionでファイルのバージョン管理をしてみる。

プラグインSubversionを利用してインストールしたついでに、バージョン管理の方法も調べてみた。自分の場合はバージョン管理といってもファイルの更新履歴を管理するだけなのだが、過去のどの時点の状態にも戻ることが出来る、というのはすごく魅力を感じる。いちいちファイル名の後に数字を付けてバックアップする、なんていう煩わしさが無くなるのだ。

ローカルヒストリーの利用

Subversionでバージョン管理と書いたが、実はRadRailsを使っていればSubversionを利用するまでもなく、戻りたい過去にいつでも戻ることが可能だった...。一人で作業して更新履歴を保管しておく目的なら、既に環境は整っていたのだ。ただ今まで知らなかっただけ。素晴らしい機能があるのに、ずいぶん勿体無いことをしてきた...。(RadRailsを日本語化していろいろ見ているうちに気付いた)

ファイルの更新履歴を確認したい時
  • 更新履歴を確認したいファイルを右クリックする。
  • 右クリックメニューから「比較」または「置換」で、「ローカル・ヒストリー」を選択する。
  • ウィンドウに今まで変更した履歴が表示される。
    • 「比較」では左右にファイル内容が並べて表示されるだけ。
    • 「置換」なら表示された内容を確認して「置換」ボタンを押すと、その時点の内容に置き換わる。

削除したファイルを取り戻したい時
  • 削除したファイルがかつて存在していたフォルダを右クリックする。(削除したファイルより上位階層であれば、どこでもよい)
  • 右クリックメニューから「ローカル・ヒストリーからの復元」を選択する。
  • 過去に削除してしまったファイルの一覧が表示されるので、チェックマークを付けて復元ボタンを押すせば、元通り復活する。

こんなに簡単に出来るとは...。これからは変更も削除も思うままに大胆にやってしまおう。

環境設定
  • ローカルヒストリーの環境設定は、一般 >> ワークスペース >> ローカル・ヒストリーで行う。
  • 1ファイル当りの履歴を保持する日数、件数、保存容量が設定出来る。

デフォルト設定ではちょっと心細かったので変更した。

それならSubversionは必要か?

一人で作業している分には、RadRailsのローカルヒストリーでの履歴管理でも十分なのだが、Subversionを利用すると、さらに使い勝手が上がりそうだ。

  • 変更を保存する時に説明書きを付けることが出来る。
    • ローカルヒストリーは日付と時間による管理なので、内容はファイルの中身を確認するしか無い。
    • Subversionでは分かり易い説明書きを付けることで、おおよその内容の見当がつく。
    • ローカルヒストリーで作業して、ある程度形になったらSubversionへアップロード、という使い方が便利そうだ。
  • 複数人での開発にはSubversion
    • Subversionでは、いつ、誰が、どんな変更をしたかを管理し続けてくれるので、開発者全員の変更履歴が簡単に確認出来る。
    • しかも、同じフロジェクトを同時進行で共有して作業出来る。誰かがファイルを開いていると、他の人は使えないという状況にはならない。


Subversionで更新履歴を管理

ということで、Subversionを利用してみることにした。といっても、インターネットに公開するような使い方ではなく、MacOSXのファイル共有に更新履歴の管理機能が付いたような使い方を目指してみる。小さなLAN環境で必要最小限の作業でSubversionを使えるようにしたい。

利用する環境
  • MacBook
  • MacOSX10.4.8
  • RadRails0.7.1日本語環境
  • ログインユーザ名:zari
  • Subversionで管理するプロジェクト名:softwarebook2
ダウンロード
リポジトリの作成(ターミナルでの作業)
  • リポジトリとはSubversionの管理データ一式が入ったフォルダのこと。ここではreposという名前にしてみた。ターミナルを起動して、以下のコマンドを実行した。
MacBook:~ zari$ svnadmin create ~/repos
プロジェクトをSubversionの管理にする。(RadRails日本語環境での作業)
  • Railsナビゲータータブで、Subversionで管理したいプロジェクトを選択する。
  • 右クリックしてメニューから、チーム >> プロジェクトの共用... を選択。

表示されたウィンドウで、

  • 「Other」の中の「SVN」を選択して、「次へ」ボタンを押す。
  • 「新しいリポジトリー・ロケーションを作成」を選択して、「次へ」ボタンを押す。
  • ロケーションのUrlは以下を入力した。
file:///User/zari/repos

---「~/repos」のように書きたくなるが、file://に続けて「/User/zari/repos」と絶対パスで指定する必要がある。

  • 「プロジェクト名をフォルダ名として使用」を選択して、「次へ」ボタンを押す。
  • 「プロジェクト共有の準備完了」と表示されるので、「終了」ボタンを押す。
  • コミットコメント*1を入力して、履歴管理の対象とするファイルとフォルダにチェックを付けて、「OK」ボタンを押す。(「すべて選択」ボタンで全部対象にしてしまった)
  • 以上でプロジェクトがリポジトリに登録され、Subversionによる管理が始まった。
Subversionの使い方(コミットと更新のみ)
右クリックして、チーム >> コミット
自分の作業ファイルの変更をリポジトリに登録する。
    • コミットごとにリビジョン番号が一つずつ増えていく。(ファイル名の右に表示されている番号)
右クリックして、チーム >> 更新
最新のリポジトリ内容をチェックする。
    • もし自分以外のユーザが変更を加えていたら警告してくれる。
    • 変更を警告されたら、自分が作業中のファイルをどうするべきか決めてあげる。
      • 変更された最新のリポジトリの内容にする。
      • 変更前のリポジトリの内容に戻す。
      • 自分が作業中の内容にする。
      • または以上3つの内容を複合的に編集する。
右クリックの「比較」や「置換」メニュー
「リビジョン...」や「ベース・リビジョン」「リビジョンから最新」といったSubversionを利用するメニューが選択出来るようになる。

他のマシンからSubversionを利用する。

他のマシンでsoftwarebook2プロジェクトの編集作業をするには、Railsナビゲータータブで右クリックして、インポートすればよいのだが、一つ問題が発生。MacOSXのファイル共有を利用して、インポート先のUrlをfile:///Volumes/zari/reposで指定した場合、自分の環境ではインポートは出来ても、そのあとのファイルの変更をコミットすることは出来なかった...。
そこで次の作戦を考えた。Subversionにはsvnserveというサーバーソフトが付属している。試しにこれを使ってみたら、ちゃんとコミットすることが出来た。以下はその作業手順。

svnserveの設定
  • /Users/zari/repos/conf/svnserve.confへ以下のように追記する。(オレンジ色の行)
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository.  (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)

### Visit http://subversion.tigris.org/ for more information.

[general]
### These options control access to the repository for unauthenticated
### and authenticated users.  Valid values are "write", "read",
### and "none".  The sample settings below are the defaults.
# anon-access = read
# auth-access = write
anon-access = read
auth-access = write
### The password-db option controls the location of the password
### database file.  Unless you specify a path starting with a /,
### the file's location is relative to the conf directory.
### Uncomment the line below to use the default password file.
# password-db = passwd
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control.  Unless you specify a path
### starting with a /, the file's location is relative to the conf
### directory.  If you don't specify an authz-db, no path-based access
### control is done.
### Uncomment the line below to use the default authorization file.
# authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa.  The default realm
### is repository's uuid.
# realm = My First Repository
realm = Ruby on Rails
コード 意味
anon-access = read ユーザー認証してない場合、読み込みだけは許可する設定。
auth-access = write ユーザー認証している場合、読み書きを許可する設定。(コミット可能)
password-db = passwd パスワードの設定に、passwdファイルを利用する設定。
realm = Ruby on Rails ユーザー認証ウィンドウで表示するタイトル、何でもいい。
      • anon-access = noneと設定すれば、読み込みする場合にもユーザー認証が必要になる。(インポートの時にもユーザー認証を求められる)
      • realm = Ruby on Railsについては下記スクリーンショットも参照。ユーザーが見て何の認証なのか理解できる言葉がベスト。

ちなみに、ユーザー認証の時、以下のように反映されるのだ。

  • /Users/zari/repos/conf/passwdへ以下のように追記する。(オレンジ色の行)
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.

[users]
# harry = harryssecret
# sally = sallyssecret
zari = svn
コード 意味
zari = svn ユーザーはzari、パスワードはsvnの設定。
      • ユーザー名はOSのログインユーザー名と同じでなくて良い。
      • ユーザ名 = パスワードの書式で改行して、複数登録出来る。

以上で設定は終了。

svnserveの起動

三つの運用方法があるが、一番簡単そうなデーモンでの運用にしてみた。ターミナルから以下のコマンドを実行した。

svnserve -d

以上でsvnserveの起動完了。

他のマシンでインポート
  • Railsナビゲーター タブで右クリックして、インポートを選択する。

表示されたウィンドウで、

  • 「Other」の中の「SVN」を選択して、「次へ」ボタンを押す。
  • 「新しいリポジトリー・ロケーションを作成」を選択して、「次へ」ボタンを押す。
  • ロケーションのUrlは以下を入力した。
svn://10.0.1.7/Users/zari/repos
      • 「10.0.1.7」のアドレスについては、リポジトリを管理しているマシンでのLAN上のIPアドレスになる。
      • MacBookの場合、システム環境設定で「共有」を選択して、サービス タブをクリックすると下の方で確認出来る。「ほかの Macintosh ユーザは“afp://10.0.1.7/”でこのコンピュータにアクセスできるほか、...」のように書いてある。
  • リポジトリの中のフォルダの一覧が表示されるので、softwarebook2を選択して、「次へ」ボタンを押す。
  • 「プロジェクトとしてワークスペースへチェックアウト」を選択して、「次へ」ボタンを押す。
  • 「デフォルトのワークスペースを使用」にチェックを入れた状態で、「終了」ボタンを押す。
  • 読み込み中のウィンドウが表示され、しばらくするとインポート完了。

以上で、リポジトリからインポートされ、Subversionによる管理が始まる。

ファイルの変更をコミット

初めてコミットする時には、ユーザー認証を求められる。先ほどpasswdファイルに追記した内容で認証されると、無事コミットが完了した!

      • svnserveで運用するなら、きちんとMacOSXのログインユーザーとしてsvnserve専用のユーザーアカウントを作成して運用する方が良い。

参考ページ

感謝です!

*1:更新履歴の説明書き、分かり易い内容で書いておくと便利