開発者の作業
開発者とはシステム開発においてシステムの設計、実装、テストを行う人のことです。
この開発者という役割の人がSubVersionをどのように利用してリソースのバージョン管理を
行うか、以下に示します。
作業コピーの作成(チェックアウト)
開発者がプロジェクトに参画してから一番初めにすることは、そのプロジェクトで管理する リソース(SubVersionリポジトリに格納されている)の
を取得することです。
自分のPCに作業コピーを作成するためのSubVersionコマンドが
です。一般的にこの作業を「リポジトリからのチェックアウト」といいます。
作業コピーの変更
自分のPCにリポジトリから作業コピーをチェックアウトしたら、そこからはその作業コピーに対して追加・変更・削除を行うことになります。
この作業コピーはコピーという名のとおり、リポジトリのコピーなので作業コピーでの修正が即リポジトリへ
反映されるわけではないことを覚えておいてください。
リポジトリへ作業コピーでの修正内容を反映するためのコマンドは後で説明します。
作業コピー内での編集では、SubVersionが編集前の内容を保持しているのでいつでも編集内容を元に戻すことができます。ですので怖がらずにどんどん編集してください。
ただし、作業コピーを編集したことをSubVersionに伝える必要があります。それには以下のコマンドを使用します。
| SubVersionコマンド | 操作 |
| ファイル・フォルダの追加 | |
| ファイル・フォルダの削除 | |
| ファイル・フォルダのコピー | |
| ファイル・フォルダの移動 |
です。
作業コピーの更新
SubVersionでは複数の開発者が同じリポジトリに対して複数の作業コピーを作成し、それぞれの作業コピーに
対して編集を行うことになります。そして他の開発者がその人の作業コピーの内容をリポジトリに反映することがあります。
(このようなSubVersionのバージョン管理モデルについては
に詳しい説明があります)
この場合、その開発者がリポジトリに反映した内容をどうやって自分の作業コピーに反映すればよいのでしょうか?
このような場合、作業コピーの内容をリポジトリの最新状態に更新するためのコマンド
を利用します。
svn updateを行うことで自分の持つ作業コピーにリポジトリの内容を反映してくれます。また、
もし、自分が編集中のファイルを他の人が編集してリポジトリに反映していた場合は、それらをマージしてくれます。(マージがうまくいかない場合もあります。それについては後で説明します)
変更箇所の確認
前にも少し説明しましたが、SubVersionでは作業コピーでの編集がどのようなものであったのか調べることができます。そのためのコマンドが
| SubVersionコマンド | 操作 |
| 修正箇所の表示 | |
| 修正前との差分表示 | |
| 修正前ファイルへの復元 |
です。これらのコマンドを利用してどのような修正が加えられたか、妥当な修正か、などを判別することができます。
ファイルの衝突
すでにsvn updateで自分が作業中のファイルに対してもリポジトリの最新状態がマージされることは説明しましたが、同じファイルの同じ行を別々の人が修正している場合など、ファイルマージがうまくいかない場合があります。
このような場合、SubVersionは「ファイルの衝突」という状態になり、ファイル衝突を回避するためのいくつかのファイルを生成します。(1つ前のバージョン、自分の修正分、他人の修正分)
これらのファイルを参照しながら、開発者はファイルの衝突を解消する必要があります。
ファイルの衝突が回避できたら、そのことをSubVersionに伝える必要があります。そのときに使用するコマンドが
になります。
作業コピーのコミット
これまで説明したことは自分の作業コピー内での作業でしたが、最後に自分の修正が妥当なものであることが
確認できたら、作業コピーの内容をリポジトリに反映する必要があります。
そのためのコマンドが
になります。この際、どのような修正を加えたのかコメントを記述してリポジトリに反映します。 コミットが完了すると、また次の作業に移ることができます。
まとめ
このように開発者の日々の作業は作業コピーをチェックアウトした後は、
svn update -> ファイルの編集 -> svn status -> ファイル衝突の確認 -> svn commit
の繰り返しになります。
1回のコミットでは1作業単位(1機能の実装、1つの不具合修正)が良いとされています。
また、ソースファイルなどをコミットする際は、少なくともコンパイルが通る状態であることが望ましいです。
このようにSubVersionを利用することでリソースのバージョン管理を行いながら日々の開発を行うことが可能になります。それによってより簡単にファイルの修正やテスト実装などを行うことができ、またいつでもファイルを復元できるようになります。