WindowsでSubversionを使う:TortoiseSVNでバージョン管理

 Windows環境でSubversionによるバージョン管理を行いたい場合に便利なのが、GUIでリポジトリにアクセスできるTortoiseSVNだ。本記事では、TortoiseSVNの導入から基本的な使用方法までを解説する。

図1
図1 TortoiseSVN

TortoiseSVNをインストールする

 TortoiseSVN(本家)は、Windows 2000/XP/Vistaで動作するSubversionクライアントである。エクスプローラーの拡張機能としてインストールされ、エクスプローラーからGUIでファイルのチェックアウトやコミット、アップデートといった作業を行えるのが特徴だ(図1)。

 TortoiseSVNはSourceForge.JPのダウンロードページからダウンロードできる。32bit版と64bit版のバイナリインストーラが用意されているほか、UIを日本語を含む各種言語に対応させるLanguage packsも用意されている。

 インストーラでは特に設定すべき項目はないので、すべてデフォルトのままでインストール作業を進めよう(図23)。インストールの完了後、Windowsを再起動するとエクスプローラーからTortoiseSVNを利用できるようになる。

 また、UIを日本語化したい場合は続けてJapanese Language packをインストールする。Japansese Language packのインストールが完了したら、エクスプローラーのショートカットメニューから「TortoiseSVN」-「Settings」を選択してTortoiseSVNの設定画面を開き、「Language」で「日本語」を選択して「OK」をクリックすれば、UIが日本語化される(図45)。

図2 図3
図2 TortoiseSVNのインストーラ。本記事では、「TortoiseSVN 1.4.2.13595(32bit版)」を使用している 図3 インストールするコンポーネントを選択できるが、デフォルトのままで問題ない

図4 図5
図4 TortoiseSVNおよびJapanse Language packのインストール後、適当なフォルダ上で右クリックし、ショートカットメニューから「TortoiseSVN」-「Settings」をクリックして設定画面を開く 図5 「一般」項目の「言語」で「日本語」を選択すると、UIが日本語化される

リポジトリからファイルを取り出す

 リポジトリに保存されているファイルをローカルに取り出す(チェックアウト)には、まず取り出したファイルを保存するフォルダを用意し、そのフォルダでショートカットメニューの「SVNチェックアウト」をクリックする。「チェックアウト」ダイアログが表示されるので、「リポジトリのURL:」に接続するリポジトリやユーザー名、取得するディレクトリなどの情報を表1の形式で入力し、「OK」をクリックすればよい(図6~8)。

表1:リポジトリURLの主な指定方法

アクセス方式 指定するURL
SVN+SSH svn+ssh://<ユーザー名>@<サーバー名>/<取得したいディレクトリのパス>
HTTP、WebDAV http://<ユーザー名>@<サーバー名>/<取得したいディレクトリのパス>
ローカルファイル file:///<取得したいディレクトリのパス>

 たとえば次のような条件でチェックアウトを行うとしよう。

  • ユーザー名:「john」
  • アクセス方式:SVN+SSH
  • Subversionサーバー:「svn.sourceforge.jp」
  • 取得したいディレクトリ「/svnroot/test11/」

 この場合、リポジトリのURLには「svn+ssh://john@svn.sourceforge.jp/svnroot/test11/」と入力すればよい。また、ユーザー名は入力しなくても良いが、その場合リポジトリにアクセスするごとにユーザー名の入力が促される。

図6 図7
図6 取り出したファイルを保存したいフォルダで右クリックし、ショートカットメニューの「SVNチェックアウト」をクリックする 図7 「リポジトリのURL:」にチェックアウトしたいリポジトリのURLを入力し、「OK」をクリックする

図8
図8 リポジトリへのアクセス中には、このような進捗確認画面が表示される

sourceforge.jpのSVNリポジトリへのアクセス

 SourceForge.JPでは、各プロジェクトごとに自由に利用できるSubversionリポジトリが用意されている。SourceForge.JPのSubversionサーバーは「svn.souceforge.jp」で、「/svnroot/<プロジェクトのUNIX名>」以下が各プロジェクトごとのリポジトリとなる。

 たとえば、「sampleproj」というプロジェクトのリポジトリから、「john」というユーザーでファイルを取得する場合は、リポジトリのURLとして「svn+ssh://john@svn.sourceforge.jp/svnroot/sampleproj」を指定すればよい。

 なお、SourceForge.JPのSubversionリポジトリでは、アクセス方式としてHTTPを使用することで、認証なしに匿名でファイルをチェックアウトできる。たとえば先の例では、「http://svn.sourceforge.jp/svnroot/sampleproj」とすることで匿名でファイルをチェックアウトできる。ただし、SourceForge.JPでは匿名でのコミットは行えない。そのため匿名でチェックアウトしたファイルは、そのままではコミットすることができないので注意してほしい。

ローカルで加えた変更をリポジトリに保存する

 チェックアウトしたファイルに変更を加えた後、変更したファイルをリポジトリに保存するには、「コミット」を実行すればよい。コミットは、変更が加えられたファイルを含むフォルダでショートカットメニューから「SVNコミット」を選択することで実行できる。「コミット」ダイアログが表示されるので、「メッセージ」に変更点の概要などのメモを入力し、「OK」をクリックするとコミットが実行される(図912)。

 なお、書き込みに認証が必要なレポジトリの場合はここで認証が必要となるので注意してほしい。たとえばssh+svnプロトコルでリポジトリへのアクセスを行う場合、使用するSSH鍵を指定しておく必要がある。

図9 図10
図9 修正を加えたファイルが含まれるフォルダで、ショートカットメニューの「SVNコミット」をクリックする 図10 「メッセージ」に変更点の概要などを入力し、「OK」をクリックするとコミットが実行される

図11 図12
図11 認証が必要な場合、ログイン名を入力するダイアログが表示される 図12 SSH認証を使用する場合、必要に応じてパスフレーズの入力も求められる

TortoiseSVNで使用するSSH秘密鍵を指定する

 TortoiseSVNの配布パッケージには、SSHクライアントであるTortoisePlink.exeも同梱されており、特に設定をしなくともsvn+sshプロトコルによるリポジトリへのアクセスが行える。ただし、公開鍵認証を必要とするサーバーに接続する場合は、別途使用するSSH秘密鍵を指定しておく必要がある。

 TortoisePlink.exeはWindows用のSSHクライアントであるPuTTYから派生したもので、使用する鍵もPuTTY用のものを利用する。PuTTY用のSSH暗号鍵を生成したり、Linux/UNIXなどのssh-keygenコマンドで作成したSSH秘密鍵をPuTTY用の鍵に変換する方法については別記事で解説しているので、そちらを参照してほしい。

 使用するSSH秘密鍵は、TortoiseSVNの設定画面の「ネットワーク」項目にある「SSHクライアント」で指定する。まず、エクスプローラのショートカットメニューから「TortoiseSVN」-「設定」を選択して設定ウィンドウを開き、「SSHクライアント」を次のように指定する。

<TortoiseSVNのインストールパス>\bin\TortoisePlink.exe -i <使用するSSH秘密鍵>

 あとは「適用」もしくは「OK」をクリックし、設定を適用すればよい(図A)。

 なお、このようにしてSSH秘密鍵を指定した場合、認証が必要なリポジトリへのアクセス時には毎回パスフレーズの入力が求められる。また、もし毎回パスフレーズを入力するのが面倒なら、PuTTYに付属する「pageant.exe」を利用することで、パスフレーズの入力を自動化できる。pageant.exeのアイコンに使用するSSH秘密鍵をドラッグ&ドロップし、鍵に対応するパスフレーズを入力するとpageant.exeがタスクバーの通知領域に常駐し、以後自動的に認証作業を代行してくれるようになる。

図A
図A 設定画面の「ネットワーク」項目にある「SSHクライアント」で、使用するSSHクライアントとともに使用するSSH秘密鍵を指定する

他者がリポジトリに加えた修正をローカルのファイルに反映させる

 他者がリポジトリに加えた修正をローカルのファイルに反映させるには、「SVN更新」を行う。ショートカットメニューから「SVN更新」を選択すると、サーバーに問い合わせが行われ、変更されたファイルの差分が取得されてローカルのファイルが更新される(図13)。

図13
図13 「SVN更新」では、リポジトリとローカルファイルの同期を行える

リポジトリにファイルやフォルダを追加する

 リポジトリに新たにファイルを追加するには、追加するファイルをローカルで作成したのち、追加したいファイルを選択してショートカットメニューから「TortoiseSVN」-「追加」を選択する(図1415)。「追加」ダイアログが表示され、追加するファイル/フォルダの候補がリスト表示されるので、追加したいファイル/フォルダにチェックを入れて「OK」をクリックすればよい。

 また、ファイルだけでなくフォルダを追加することも可能だ。フォルダを指定すると、自動的にそのフォルダ内のファイルもリポジトリに追加される。なお、「追加」を実行した時点では、ファイルはリポジトリにコピーされない。追加を行ったあと、コミットを行った時点でファイルがリポジトリにコピーされる。

図14 図15
図14 リポジトリにファイルを追加するには、「TortoiseSVN」-「追加」をクリックする 図15 追加するファイルを確認し、「OK」をクリックする。リポジトリへの実際のファイル転送は、コミット実行のタイミングで行われる

リポジトリ内のファイルやフォルダを削除する

 リポジトリ内のファイルやフォルダを削除するには、削除したいファイル/フォルダを選択してショートカットメニューの「TortoiseSVN」-「削除」を選択する(図16)。

 このコマンドを実行すると、ローカルのファイルは即座に削除されるが、リポジトリ内のファイルの削除はこの時点では行われない。実際にリポジトリ内のファイルが削除されるのはファイルの追加の場合と同様、コミットの実行時となる。

図16
図16 「TortoiseSVN」-「削除」でリポジトリからファイルを削除できる。これを実行すると、ローカルのファイルは即座に削除され、またコミットの実行時にリポジトリ内のファイルも削除される

リポジトリ内のファイルやディレクトリの名前を変更/移動する

 リポジトリ内のファイルやディレクトリの名称を変更するには、ファイルを選択してショートカットメニューの「TortoiseSVN」-「名前を変更」を選択すればよい。また、「<移動先ディレクトリの相対パス>\<ファイル名>」などのようにすればファイルを別のディレクトリに移動させることも可能だ(図1718)。ローカルのファイルは即座にリネームされ、また他のコマンドと同様、コミット時にリポジトリ内のファイルがリネームされる。

図17 図18
図17 「TortoiseSVN」-「名前を変更」でファイル名の変更や移動が行える 図18 「名前の変更」ダイアログで相対パスを含めてファイル名を指定すると、そのパスにファイルを移動できる

リポジトリにファイルをインポートする

 リポジトリに新たにファイルを登録する(インポートする)には、インポートしたいフォルダを選択し、ショートカットメニューから「TortoiseSVN」-「インポート」コマンドを選択する。「インポート」ダイアログが表示されるので、「リポジトリのURL」にファイルのインポート先リポジトリのURLを指定し、「インポートメッセージ」に概要やメモなどを入力して「OK」をクリックすればよい(図1920)。

 なお、Subversionでリポジトリを管理する場合、リポジトリのルートディレクトリ以下に「trunk/」「tags/」「branches/」という3つのディレクトリを作成するのが慣例となっている。trunk/は開発の本流となるファイルを格納するディレクトリだ。また、tags/はtrunk/以下に保存されているファイルのスナップショットを保存しておくディレクトリ、branchesはメインのソースツリーとは異なる更新を加えたい(ブランチを作成する)場合に使用するディレクトリとなる。通常、リポジトリに新しくディレクトリ(およびファイル)を登録する際は、trunk/ディレクトリ以下にサブディレクトリを作成してファイルを登録することになる。

図19
図19 フォルダを選択して「TortoiseSVN」-「インポート」でリポジトリにそのフォルダをインポートできる
図20 図20 インポート先リポジトリのURLを入力し、「OK」をクリックするとインポートが実行される