SVN ライフサイクル

この章では、バージョン管理システムのライフサイクルについて説明します。


リポジトリの作成

リポジトリは、開発者全員の作業成果を保管する集中型のスペースのようなものです。リポジトリはファイルを保管するだけでなく、毎回の変更履歴、つまり各ファイルの変更履歴も含みます。

Create 操作は、新しいリポジトリを作成するために使用します。ほとんどの場合、この操作は一度だけ実行されます。新しいリポジトリを作成するとき、バージョン管理システムはリポジトリを識別するための情報(作成場所やリポジトリ名など)の入力を求めます。


チェックアウト

Checkout 操作は、リポジトリから作業コピーを作成するために使用します。作業コピーは開発者個人の作業スペースであり、内容を変更してからリポジトリにコミットできます。


更新

名前のとおり、update 操作はリポジトリを更新するために使用します。この操作は作業コピーをリポジトリと同期させます。リポジトリはチーム全体で共有されるため、他の人が変更をコミットすると、あなたの作業コピーは古くなります。

Tom と Jerry がプロジェクトの2人の開発者だと仮定しましょう。彼らは同時にリポジトリから最新バージョンをチェックアウトして作業を開始します。この時点で、作業コピーはリポジトリと完全に同期しています。その後、Jerry は効率的に作業を完了し、変更をリポジトリにコミットしました。

このとき、Tom の作業コピーは古くなっています。更新操作により、リポジトリから Jerry の最新の変更を取得し、Tom の作業コピーを更新します。


変更の実行

チェックアウト後、変更を実行するための多くの操作を行うことができます。編集は最も一般的な操作です。既存のファイルを編集したり、ファイルの追加/削除などの操作を行ったりできます。

ファイル/ディレクトリを追加できます。ただし、追加されたファイル/ディレクトリはすぐにリポジトリの一部にはならず、保留中の変更リストに追加されるだけで、commit 操作を実行して初めてリポジトリの一部になります。

同様に、ファイル/ディレクトリを削除できます。削除操作はすぐにファイルを作業コピーから削除しますが、ファイルの実際の削除は保留中の変更リストに追加されるだけで、commit 操作を実行して初めて実際に削除されます。

Rename 操作は、ファイル/ディレクトリの名前を変更できます。「移動」操作は、ファイル/ディレクトリをある場所からリポジトリ内の別の場所へ移動するために使用します。


変更の確認

作業コピーをチェックアウトまたは更新すると、作業コピーはリポジトリと完全に同期します。ただし、作業コピーに変更を加えると、作業コピーはリポジトリよりも新しくなります。commit 操作の前に変更を確認するのは良い習慣です。

Status 操作は、作業コピーで行われた変更を一覧表示します。前述のとおり、作業コピーへの変更はすべて保留中の変更リストの一部になります。Status 操作は、この保留中の変更リストを表示するために使用します。

Status 操作は変更の一覧を提供するだけで、変更の詳細情報は提供しません。diff 操作を使用すると、これらの変更の詳細情報を確認できます。


エラーの修正

作業コピーに多くの変更を加えたが、今はそれらの変更が不要になったと仮定しましょう。このような場合、revert 操作が役立ちます。

Revert 操作は、作業コピーへの変更をリセットします。1つまたは複数のファイル/ディレクトリをリセットできます。もちろん、作業コピー全体をリセットすることもできます。この場合、revert 操作は保留中の変更リストを破棄し、作業コピーを元の状態に戻します。


コンフリクトの解決

マージ時にはコンフリクトが発生する可能性があります。Merge 操作は、安全にマージできるものを自動的に処理します。その他はコンフリクトとして扱われます。例えば、「hello.c」ファイルが一方のブランチで変更され、もう一方のブランチで削除された場合です。このような場合は、人間による処理が必要です。Resolve 操作は、ユーザーがコンフリクトを見つけ、リポジトリにそれらのコンフリクトを処理する方法を指示するために使用します。


変更のコミット

Commit 操作は、変更を作業コピーからリポジトリへ送信するために使用します。この操作はリポジトリの内容を変更し、他の開発者は作業コピーを更新することでこれらの変更を確認できます。

コミットする前に、ファイル/ディレクトリを保留中の変更リストに追加する必要があります。リストには、コミットされる変更が記録されます。コミットするとき、通常はなぜこれらの変更を行ったかを説明するコメントを提供します。このコメントもリポジトリの履歴の一部になります。Commit はアトミック操作です。つまり、完全に成功するか、失敗してロールバックするかのどちらかです。ユーザーがコミットが半分成功した状態を見ることはありません。

その他の拡張