日別アーカイブ: 2010/5/26

Subversionの使い方

Subversionのインストール (CentOS 5.5 64bit) 」に引き続き、Subversion の簡単な使いかたをまとめてみたいと思います。

1. チェックアウト (checkout)

Subversion サーバ内 hello リポジトリの全ファイルを、ローカルの作業ディレクトリである ~/hello に取得します。
(*) 前回に引き続き、Subversion サーバは localhost としています。

$ mkdir ~/hello
$ cd ~/hello
$ svn checkout svn+ssh://localhost/var/svn/repos/hello
[ユーザID]@localhost's password:

svn+ssh プロトコルを使用しているため、Subversion サーバへのログインパスワードが要求されますのでパスワードを入力してください。

A hello/trunk
A hello/branches
A hello/tags
リビジョン 1 をチェックアウトしました。

現時点では「trunk」「branches」「tags」の3つのディレクトリしかありませんのでチェックアウトは短時間で完了します。

結果を確認してみましょう。

$ ls -a hello/
. .. .svn branches tags trunk

(*) 青字はディレクトリです。

「.svn」というディレクトリができています。Subversion 管理情報が格納されているディレクトリで、全ディレクトリ (今回の例だと trunk、branches、tags) に作成されます。

2. ファイルの追加 (add, commit)

trunk 配下に新規ファイル「test.txt」を追加します。

$ cd hello/trunk
$ echo "sample" > test.txt

現時点では test.txt がローカルの作業ディレクトリ上に作成されただけです。
ファイルのステータスを確認するオプション (status) で svn コマンドを実行してみても

$ svn status
? test.txt

?」と表示され、リポジトリは存在を認識していない状態となっています。

svn コマンドを add オプション実行することで、リポジトリの追加対象となります。
ステータス確認の結果も「A」(ADD: 追加) となっています。

$ svn add test.txt
A test.txt
$ svn status
A test.txt

残念ながら、この時点でもまだリポジトリには反映されていません。
svn コマンドを commit オプション実行して、初めてリポジトリに反映 (コミット) されます。

$ svn commit -m "add new file"
[ユーザID]@localhost's password:
追加しています hello/trunk/test.txt
ファイルのデータを送信中です.
リビジョン 2 をコミットしました。

(*) パスワードの入力が必要となります。

3. ファイルの変更 (diff, commit)

今度は、先ほど追加した「test.txt」の内容を変更します。

$ echo "Hello, SVN" > test.txt

前回と同様、commitしない限りリポジトリには反映されません。
ステータスを確認してみます。

$ svn status
M test.txt

M」(MODIFIED: 更新) となっています。

また、diff オプションを使用することで、リポジトリと作業ディレクトリの内容を比較することも可能です。

$ svn diff
Index: test.txt
===================================================================
--- test.txt (リビジョン 2)
+++ test.txt (作業コピー)
@@ -1 +1 @@
-sample
+Hello, SVN.

差分内容に問題内容でしたらコミットします。
手順は「2. ファイルの追加」と同様です。

$ svn commit -m "update test.txt"
[ユーザID]@localhost's password:
送信しています hello/trunk/test.txt
ファイルのデータを送信中です.
リビジョン 3 をコミットしました。

(*) パスワードの入力が必要となります。

4. 他ユーザの変更内容の取り込み (update)

複数ユーザで同一プロジェクトを進めていると、他のユーザが修正したソースを自分の作業ディレクトリに取り込む必要があります。
他のユーザが作成・コミットした「hello/trunk/test2.txt」を取り込みます。
オプションは update を使用します。

$ svn update
[ユーザID]@localhost's password:
A hello/trunk/test2.txt
リビジョン 5 に更新しました。

(*) パスワードの入力が必要となります。
(*) hello/trunk/test2.txt コミット時のリビジョンが4であるため、今回のリビジョンは5となっています。

[ END ]

Subversionのインストール (CentOS 5.5 64bit)

CVS、Subversion、VSS等、世の中にはバージョン管理ソフト (システム?) と呼ばれるソフトが数多くあります。プログラムソースの変更履歴を容易に管理可能なため、一度使うと手放せなくなってしまいます。

通常は既に準備されている環境を使用することが多いため自分自身で立ち上げる機会は少ないですが、せっかくですので centos_x86_64 (CentOS 5.5 64bit環境) に Subversion をインストールしてみます。

Subversion は4つのプロトコルに対応しています。
  ・file (ローカルファイルへのアクセス)
  ・svn (Subversion 独自プロトコル)
  ・svn+ssh (svn プロトコルを ssh で暗号化)
  ・http/https (Apache を使用)

オープンソースプロジェクトでは http/https を使用することが多いように思えますが、今のところ Apacheのインストールは考えていないこととノートPCからも使用する (かもしれない) ことから、svn+ssh による環境構築を行います。
また、リポジトリ (ソースの格納場所) はプロジェクト毎に作成することとします。

1. Subversion のインストール

CentOS のインストール時に Subversion もインストール済みの場合、この項は飛ばしていただいて結構です。
もしインストール時の記憶があいまいでしたら rpm コマンドでインストール有無を確認可能です。

$ su -
# rpm -qa subversion
subversion-1.4.2-4.el5_3.1

rpm コマンドの結果が何も復帰しない場合は、yum コマンドでインストールを行います。

# yum install subversion.x86_64

(*)「yum install subversion」とした場合、32bit版もインストールされるので注意が必要です。

2. リポジトリの作成

Subversion のインストール完了後、リポジトリ (ソースの格納場所) の作成を行います。
最初にリポジトリ用ディレクトリを作成し、それを Subversion に登録する手順となります。
リポジトリの格納先は /var/svn/repos/hello (/var/svn/repos の hello プロジェクト) とします。

# mkdir -p /var/svn/repos/hello
# svnadmin create /var/svn/repos/hello

svnadmin コマンドを実行すると Subversion 用のディレクトリ/ファイル群が hello 配下に作成されます。

# ls /var/svn/repos/hello/
README.txt conf dav db format hooks locks

(*) 青字はディレクトリです。

3. アクセス権の設定

hello リポジトリは root で作成したため、このままでは他のユーザから更新ができません。
この問題を回避するために、リポジトリアクセス用のグループ「svn」を作成し、リポジトリ利用者には svn グループに所属してもらうことにします。

# groupadd svn
# usermod -G svn [ユーザID]

また、/var/svn 以下の所有グループの変更と write 権限の付与を行います。

# chgrp -R svn /var/svn
# chmod -R g+w /var/svn

4. リポジトリの構築 (import)

一般的に Subversion のプロジェクト構成は以下とした方がよいと言われています。
  PROJECT
   + trunk (メイン)
   + branches (ブランチ用)
   + tags (タグ用)
従わない理由はありませんので、上記構成で構築 (import) を行います。

最初に import 元となる WORK ディレクトリを作成します。
場所はどこでも構いません。(この例では ~/ 配下に作成しています)

$ mkdir ~/svn_test
$ mkdir ~/svn_test/trunk
$ mkdir ~/svn_test/branches
$ mkdir ~/svn_test/tags

作成した WORK ディレクトリを svn コマンドを使用して import します。

$ cd ~/svn_test
$ svn import svn+ssh://localhost/var/svn/repos/hello/ -m "first import"

svn コマンドは
  「svn+ssh」プロトコルを使用して
  「localhost」サーバの
  「/var/svn/repos/hello」プロジェクトに
  「first import」というコメントをつけて
  「import」を行う
という意味になります。
「-m」オプションはコメントを意味します。

(*) ファイルの追加や更新方法は、「Subversionの使いかた」を参照してください。

[ END ]