Apache Subversion: クイックスタート

SVNクライアントのインストール

インストールsvnSubversionをバージョン管理システムとして使用しているプロジェクトで共同作業を開始するには、クライアントをインストールします。

クライアントプログラムをインストールするには、ソースコードリリースから自分でビルドするか、バイナリパッケージをダウンロードします。事前にビルドされたSubversionクライアントを入手できるサイトのリストは、公式バイナリパッケージページにあります。ソフトウェアを自分でコンパイルする場合は、ソースコードページからソースを入手してください。

クライアントをインストールした直後に、svnコマンドを実行してテストできます。次の出力が表示されます

$ svn
Type 'svn help' for usage.

これで、コマンドラインクライアントを使用してリモートリポジトリと対話できます。

Subversionに慣れていない場合は、グラフィカルクライアントの方が使いやすいかもしれません。そのようなクライアントのリストは保持していません。代わりに、WebでSubversion GUIクライアントを検索することをお勧めします。

用語

リポジトリとは?

リポジトリは、多くの場合サーバー上に存在するバージョン管理データベースであり、通常、Apache HTTP Server(mod_dav_svnモジュール経由)またはsvnserveサーバーによって公開されます。リポジトリは唯一の真実のソースとして機能し、中央ストレージとして、バージョン管理されたデータの変更履歴全体をリビジョンの形式で含んでいます。

リポジトリURLの例

  • Apache HTTP Serverhttps://svn.example.com/repos/MyRepo/MyProject/trunk
  • svnservesvn://svn.example.com/repos/MyRepo/MyProject/branches/MyBranch
  • 直接アクセス(Unixスタイル)file:///var/svn/repos/MyRepo/MyProject/tags/1.1.0
  • 直接アクセス(Windowsスタイル)file:///C:/Repositories/MyRepo/trunk/MyProject

作業コピーとは?

作業コピーは、中央のSubversionリポジトリと対話するために使用する、ローカルのプライベートワークスペースです。作業コピーを使用して、プロジェクトのコンテンツを変更したり、他のユーザーがコミットした変更を取得したりします。

作業コピーにはプロジェクトのデータが含まれており、ローカルファイルシステムの通常のディレクトリのように見え、動作しますが、1つの大きな違いがあります。作業コピーは、ファイルとディレクトリの状態と変更を追跡します。作業コピーは、バージョン管理機能を備えた通常のディレクトリと考えることができます。作業コピーには、.svnという名前の管理ディレクトリがルートにあります。管理ディレクトリには、Subversionがバージョン管理機能を管理するために必要なメタデータが含まれています。

同じリポジトリまたはプロジェクトから、ローカルの変更を任意に組み合わせて、必要なだけ作業コピーを作成できます。

基本的なタスク

リポジトリへのデータのインポート

既存のバージョン管理されていないデータをSVNリポジトリにインポートする場合は、svn importコマンドを実行する必要があります。次に例を示します

$ svn import https://svn.example.com/repos/MyRepo/MyProject/trunk -m "Initial project import"

作業コピーのチェックアウト

プロジェクトのデータの変更を開始するには、バージョン管理されたプロジェクトのローカルコピーを作成する必要があります。コマンドラインsvnクライアント、または任意のGUIベースのクライアントを使用できます。プロジェクトのローカルコピーは作業コピーと呼ばれ、svn checkoutコマンドを実行することで作成します。次に例を示します

$ svn checkout https://svn.example.com/repos/MyRepo/MyProject/trunk MyWorkingCopy

その結果、MyRepoリポジトリにあるMyProjectというプロジェクトのトランクの作業コピーが取得されます。作業コピーは、コンピューターのMyWorkingCopyディレクトリにあります。トランクをチェックアウトする代わりに、ブランチまたはタグをチェックアウトできます(リポジトリに既に存在していると仮定)。

MyRepoリポジトリ全体の作業コピーを取得することもできます。ただし、そうすることは控えるべきです。一般的に、作業コピーは別の開発ブランチに即座に切り替えることができるため、作業全体のリポジトリの作業コピーを用意する必要はありません。さらに、Subversionリポジトリには、関連のない多くのプロジェクトを含めることができ、すべてのプロジェクトに対して単一の作業コピーを用意するのではなく、それぞれに専用の作業コピーを用意することをお勧めします。

作業コピーの更新

あなたはプロジェクトに取り組んでいる唯一の人ではありませんよね?これは、同僚もプロジェクトのデータを変更していることを意味します。最新の状態を維持し、他のユーザーがコミットした変更を取得するには、作業コピーでsvn updateコマンドを実行する必要があります。その結果、作業コピーはリポジトリと同期し、同僚によって行われた変更をダウンロードします。

ローカルの変更をリポジトリにコミットする前に、作業コピーを更新することをお勧めします。

ローカル作業コピーでの変更

ほとんどの場合、作業コピーのコンテンツを変更することで、プロジェクトのデータに変更を加えます。変更に満足し、徹底的にレビューしたら、それらを中央リポジトリにコミットする準備が整います。

既存のファイルの変更

お気に入りのテキストプロセッサ、グラフィックエディタ、オーディオ編集ソフトウェア、IDEなどを使用して、通常どおりファイルを変更します。変更をディスクに保存するとすぐに、Subversionはそれらを自動的に認識します。

リポジトリへの変更のコミット

作業コピーで行った変更を公開するには、svn commitコマンドを実行する必要があります。

コミットする前に変更を確認してください! svn statusおよびsvn diffコマンドを使用して、変更を確認します。

コミットコマンドの例を次に示します

$ svn commit -m "My Descriptive Log Message"

注意-m (--message)オプション。常に説明的なコミットログメッセージを含める必要があります。これは、自分自身を含む他の人が、このコミットを行った理由を理解するのに役立ちます。ログメッセージに変更の概要を含めることもお勧めします。

ファイルとディレクトリの操作の実行

作業コピー内でプロジェクトのデータに対して任意のアクションを実行できますが、コピー、移動、名前変更、削除を伴う操作は、対応するsvnコマンドを使用して実行する必要があります。

Subversionは、作業コピー内のツリーの変更にヒューリスティック追跡を使用しません。Subversionでは、ツリーの変更を明示的に追跡する必要があります。通常のファイルシステムコマンドで移動やコピーなどのツリーの変更を実行した場合、Subversionはこの操作を認識しません。ツリーの変更を追跡するには、Subversionにそれらを認識させる必要があります。

新しいファイルとディレクトリの追加

新しいファイルまたはディレクトリを作業コピーに配置すると、Subversionはそれらを「バージョン管理されていない」と見なします。svn addコマンドを実行しない限り、新しいファイルの追跡は自動的に開始されません

$ svn add foo.cs

ファイルとディレクトリの移動と名前変更

svn moveまたはsvn renameコマンドを使用して、ファイルとディレクトリを移動および名前変更します

$ svn move foo.cs bar.cs

コマンドsvn renamesvn move.

のエイリアスです。ファイルとディレクトリの複製

svn copyコマンドを使用して、ファイルとディレクトリをコピーします

$ svn copy foo.cs bar.cs

ファイルとディレクトリの削除

svn delete svn deleteコマンドを使用して、ファイルとディレクトリを削除します

$ svn delete foo.cs

ローカルの変更の復元または破棄

svn revertコマンドを使用して、ローカルのコミットされていない変更を破棄します

$ svn revert foo.cs

破棄されたコミットされていない変更は永久に失われます。元に戻された変更を回復することはできません。svn revertは注意して使用してください!

分岐とタグ付け

あなたはsvn copyコマンドを使用してブランチとタグを作成する必要があります。これは、作業コピーとリポジトリ内のアイテムを履歴的に関連付ける場合に使用するのと同じコマンドです。

コマンドsvn copyは分岐に使用されます。なぜなら、分岐は技術的にはコピー元のコピーだからです。ただし、ローカルファイルシステムでファイルをコピーするときに慣れている通常のコピーではありません。Subversionリポジトリのブランチはいわゆる「安価なコピー」であり、シンボリックリンクに似ています。したがって、新しいブランチを作成するには、完了するまでに最小限の時間しかかからず、Subversionリポジトリの容量は実質的に必要ありません。ブランチを作成し、変更のサイズやスコープに関係なく、必要な変更に使用できます。

直接URLからURLへのコピーを使用したブランチの作成

Subversionでの分岐は簡単です。最も単純な形式では、新しいブランチを作成するには、リモートリポジトリのURLに対してコマンドを実行する必要があります。たとえば、メインライントランクから新しいブランチを作成してみましょう

$ svn copy https://example.com/MyRepo/trunk https://example.com/MyRepo/branches/MyNewBranch -m "Creating a new branch"

ローカルリポジトリの設定

コンピューターにSubversionリポジトリを作成し、file://スキームを使用してローカルで対話できます。このアプローチは、Subversionをローカルで使用して、個人ファイルと単一ユーザーのプロジェクトを追跡するのに役立ちます。

以下の手順では、既存のプロジェクトのための最小限の環境を作成します。プロジェクトを含むディレクトリを、新しく作成されたローカルSubversionリポジトリの作業コピーに変換します。その結果、作業コピー内のファイルを修正し、ローカルリポジトリでの変更を追跡できます。

Unixの場合

  1. SVNリポジトリを配置する親ディレクトリを作成します。.svnrepos(SVNリポジトリを配置する場所)
    $ mkdir -p $HOME/.svnrepos/
  2. その下に新しいリポジトリMyRepoを作成します。.svnrepos:
    $ svnadmin create ~/.svnrepos/MyRepo
  3. 新しいリポジトリに推奨されるプロジェクトレイアウトを作成します。
    $ svn mkdir -m "Create directory structure." \
      file://$HOME/.svnrepos/MyRepo/trunk \
      file://$HOME/.svnrepos/MyRepo/branches \
      file://$HOME/.svnrepos/MyRepo/tags
  4. バージョン管理されていないプロジェクトがあるディレクトリに移動します。./MyProject(バージョン管理されていないプロジェクトがある場所)
    $ cd $HOME/MyProject
  5. カレントディレクトリをリポジトリのtrunk/の作業コピーに変換します。
    $ svn checkout file://$HOME/.svnrepos/MyRepo/trunk ./
  6. プロジェクトのファイルをリポジトリに追加するようにスケジュールします。
    $ svn add --force ./
  7. プロジェクトのファイルをコミットします。
    $ svn commit -m "Initial import."
  8. 作業コピーを更新します。
    $ svn update

Windowsの場合

  1. SVNリポジトリを配置する親ディレクトリを作成します。C:\Repositories(SVNリポジトリを配置する場所)
    mkdir C:\Repositories
  2. その下に新しいリポジトリMyRepoを作成します。C:\Repositories:
    svnadmin create C:\Repositories\MyRepo
  3. 新しいリポジトリに推奨されるプロジェクトレイアウトを作成します。
    svn mkdir -m "Create directory structure." ^
      file:///C:/Repositories/MyRepo/trunk ^
      file:///C:/Repositories/MyRepo/branches ^
      file:///C:/Repositories/MyRepo/tags 
  4. バージョン管理されていないプロジェクトがあるディレクトリに移動します。C:\MyProject(バージョン管理されていないプロジェクトがある場所)
    cd C:\MyProject
  5. カレントディレクトリをリポジトリのtrunk/の作業コピーに変換します。
    svn checkout file:///C:/Repositories/MyRepo/trunk .
  6. プロジェクトのファイルをリポジトリに追加するようにスケジュールします。
    svn add --force ./
  7. プロジェクトのファイルをコミットします。
    svn commit -m "Initial import."
  8. 作業コピーを更新します。
    svn update

『Subversionブック』のクイックスタートも参照してください。

さらにヘルプが必要な場合

Apache Subversion (SVN) を初めて使用する場合は、『Subversionによるバージョン管理』 (SVNBook) を読んでください。SVNBookはSVNのバイブルであり、Subversionのユーザーと管理者にとって必読です。SVNBook 1.8 はhttps://svnbook.red-bean.com/en/1.8/にあります。