Subversion

1月 1, 2003 · Posted in Subversion · Comment 

Subversionとは

Subversion(サブバージョン)はプログラムのソースコードなどを管理するバージョン管理システムの一つ。
Suvbersionの使い方はCVSによく似ている。コマンドラインで使用する際の主要なコマンド名はCVSと一致するように作られているため、クライアントはCVSからの移行がきわめて容易である。
(Wikipedia)
http://ja.wikipedia.org/wiki/Subversion

Subversion/Subversion早覚え

1月 1, 2003 · Posted in Subversion · Comment 

概要

主に開発者向けのクイックスタート&ケーススタディです。一部管理者向け。

Subversion付属プログラム一式

-svn
-svn version
-svn look
-svn admin
-svn dumpfilter
-mod_dav_svn
-svnserve

Subversionケーススタディー(基礎)

リポジトリの作成

リポジトリとは、データを格納するために利用するデータベースのことである。
svnadminを利用

書式

svnadmin create [リポジトリのパス]

svnadmin create /var/svn/rep

Subversionのリポジトリの標準ディレクトリ構成

Subversionのディレクトリ構成は完全に自由となっているが、全世界で共通の標準構成が存在する。
特に例外条件のない限り、この構成に従うべき。

-ルートディレクトリ
–branches
–tags
–trunk

データ投入

以下の構造のディレクトリをローカルマシンの好きな位置に作成。
-ルートディレクトリ
–branches
–tags
–trunk
—test.txt(内容はaiueo)

svnサーバーに投入

svn import /var/work/ file:///var/svn/rep/work/ -m "initial"

追加しています。
/var/work/branches
/var/work/tags
/var/work/trunk
/var/work/trunk/test.txt

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

リポジトリパスの指定形式は次で説明。
上記の「-m "文字列"」 はコミットコメント。コミット理由を記述する。
コミットとは、ローカルのファイルをリポジトリに送信すること。
リビジョンとは、コミットが完了した時点のリポジトリ全体のバージョン番号(改定履歴番号)のこと。

SVNリポジトリへのローカルファイルの投入が完了した。

リポジトリパスの指定方法

リポジトリはそのアクセス方法によって指定方法が異なる。
-直接アクセス
–file:///
-WebDAV経由
–http
-WebDAV+SSH経由
–https
-svnserveのTCP/IP経由
–svn
-svnserveのTCP/IP+SSH経由
–svn+ssh

Subversionを利用した作業の典型的なサイクル(開発者初級編)

-作業コピーの取得
–リポジトリの最新の状態を、ローカルマシンにコピーする。コピーしたファイル群を作業コピーと呼ぶ。
—ローカルマシンにファイルが一つも存在しない状態でリポジトリからファイルを取得することを、「チェックアウトする」という。
—ローカルマシンにファイルが存在している状態で、リポジトリの変更分をローカルマシンに取り込むことを「アップデート(更新)する」という。
-ファイル修正
–ローカルマシンでファイルを修正する。
-リポジトリへのファイルの反映
–ローカルマシンで修正したファイルをSVNのリポジトリにコミットする。
–一般的に、反映前にアップデートを行った後、コミットを行う。

チェックアウト

ローカルマシンにリポジトリの作業コピーを作成する。
この作業には、svn checkoutコマンドを利用する。

書式

svn chekcout [リポジトリのパス] [作業コピーを取得するフォルダ]

svn checkout file:///var/svn/rep/work/trunk /var/svn/work2
A work2/test.txt

リビジョン1をチェックアウトしました。

これで作業コピーの取得が完了した。

ファイルの修正

取得したファイルを修正する。
適当に。

test.txt(変更前)

aiueo

test.txt(変更後)

aiueo
aiueo2

作業コピーのアップデート(最新化)

作業コピーのディレクトリ内でsvn updateコマンド

書式

svn update

svn update
U test.txt
リビジョン3を更新しました。

ファイルのコミット

作業コピーのディレクトリ内でsvn commitコマンド

書式

svn commit [ファイル名(省略可能)]

svn commit

送信しています text.txt
ファイルのデータを送信中です。
リビジョン2をコミットしました。

これで基本的なサイクルは終わり。あとは変更の衝突時に手動で修正(マージ)するケースがある(後述)

チェックアウト・アップデート時に表示されるフラグ

svn updateやsvn checkoutを実行したときに表示されるファイル・フォルダ一覧の左側にアルファベットが表示されます。

svn update
U test.txt
リビジョン3を更新しました。
2行目の「U」

意味
-A:追加されたファイルの受信
-U:更新されたファイルの受信
-D:ファイル削除
-R:ローカルファイルが削除され、新たなファイルで置換された
-G:マージされた
-C:衝突の発生。問題を主導で解決する必要がある。

GとCはあとで説明。

作業コピーの4つの状態

SVNでは、作業コピーに4つの状態がある。
状態によって、次に行うべき作業が異なる。

-作業コピーに変更なし、リポジトリの最新はすべて取得済み
–完全に同期が取れている状態。できる限り細かい単位でこの状態を維持する。
-作業コピーに変更あり、リポジトリの最新はすべて取得済み
–変更分をリポジトリにコミットする。
-作業コピーに変更なし、リポジトリの最新は未取得
–アップデートして作業コピーを最新化する。
-作業コピーに変更あり、リポジトリの最新は未取得
–コミットはエラーとなる(out of dateエラー)
–アップデートはSVNによってマージされ、衝突部分がマークされる(後述)

SVNのオンラインヘルプの表示方法

全体のヘルプを表示

svn help

個別のコマンドのヘルプを表示

svn help copy

SVNのリビジョンについて

リビジョン番号でリビジョンを指定

書式

-r [リビジョン番号]

svn diff -r 1:2 test.txt

リビジョンキーワードでリビジョンを指定

細かいリビジョン番号を指定するのが面倒なケースがいくつかあるので、代わりにリビジョンキーワードが用意されている。
-HEAD
–最新
-BASE
–作業コピーの修正元リビジョン
-COMMITTED
–ファイルが変更された、BASE以前の最後のリビジョン
-PREV
–最新-1

svn diff -r PREV:HEAD test.txt

リビジョン日付でリビジョンを指定

書式

-r {日付}

svn checkout -r {2008-01-01}

例2

svn checkout -r {15:30:00}

リビジョンを日付で指定すると、SVNは指定日時以前で最新リビジョンを探しにいく。
範囲も可能

svn checkout {2008-01-01}:{2008-01-03}

svnディレクトリ

作業コピー内の.svnディレクトリは管理用のディレクトリなので、手動で変更してはいけない。

Subversionケーススタディー(中級)

SVNを利用した作業の流れ 中級編

-作業コピーの変更をコミット
-衝突が発生!
-マージする
-コミットする

衝突が発生するケース


+あるファイルを多数の開発者がチェックアウトする。
+開発者Aが変更したファイルをコミットする
+開発者Bが変更したファイルをコミットしようとする。このとき開発者Aの更新に対する衝突が発生する。変更点に重複がある場合、SVNサーバーはうまく変更内容をマージすることができないので、衝突の発生を通知し、処理を終了する。

SVNでの衝突発生後の流れ

-開発者は衝突の内容を確認する。内容により下記のいづれかを選択する。
–自身の変更を破棄する
—svn revert ファイル名
–変更点を手動でマージして、その結果をコミットする

SVNにおける手動マージ作業

コミット時に衝突が通知された場合、まずはアップデートを行います。

svn update
C test.txt
リビジョン4を更新しました。

その時点で、作業コピーは以下のようになります
-作業コピーフォルダ
–test.txt ← mineとr4の衝突をマークしたファイル
–test.txt.mine ← 自分が行った修正のファイル
–test.txt.r2 ← 自分が修正を行う前のリビジョンのファイル
–test.txt.r4 ← 他の開発者が修正を行ったリビジョンのファイル

衝突マークの様子

<<<<<<< .mine
aiiiiueo
=======
aiuuuueo
>>>>>>> .r2

コミット時に衝突が発生した場所に、衝突マーカーという目印がつけられました。
この衝突を解決し、マージ作業のための補助ファイル(.mine, .rXX)を削除してマージしたファイルをコミットすると、マージ作業が終了となります。

補助ファイル(.mine, .rXX)が存在する状況でコミットコマンドを実行しても、必ずエラーとなります。

svn commit test.txt -m "merge!"

svn:コミットに失敗しました
svn:test.txtがまだ衝突しています。

履歴の確認

-svn log ログ
-svn diff 差分
-svn cat ファイル内容
-svn list 一覧

他コマンド

-svn cleanup SVNリポジトリを正常で一貫した状態にする
-svn import ディレクトリをリポジトリにインポートする

Subversion/インストール

1月 1, 2003 · Posted in Subversion · Comment 

※Fedora7
※Suvbersion 1.4.3
※mod_dav_svn 1.4.3
※httpd 2.2.6

Subversionのインストール

yum install subversion

mod_dav_svn(Apacheとの連携モジュール)のインストール

yum install mod_dav_svn

リポジトリの作成

cd /var/www/localhost/svn
svnadmin create rep
chown -R apache:apache rep

/etc/httpd/conf.d/subversion.confの設定

認証用モジュールのコメントアウト

めんどくさいから今回は認証なし

#LoadModule authz_svn_module modules/mod_authz_svn.so

設定終わり

次ページへ »