移行の準備

準備

SVN から Git ベースのバージョン管理に移行する最初のステップとして、移行推進担当者のローカルマシーンを整備します。このステップでは、便利なユーティリティスクリプトをダウンロードし、(必要に応じて) ケースセンシティブなファイルシステムをマウントし、SVN のオーサー情報を Git にマップします。

これ以降の作業はすべて移行推進担当者のローカルマシーン上で実行します。

移行処理スクリプトのダウンロード

Git には SVN リポジトリのインポートに必要なツールのほとんどが付属していますが、アトラシアンが便利な JAR ファイルにまとめた機能の一部が不足しています。このファイルは移行に不可欠なものですので、アトラシアンの Bitbucket アカウントから svn-migration-scripts.jar を必ずダウンロードしてください。このガイドでは、このファイルがホーム ディレクトリに保存されているものとします。免責事項: svn の移行には、大文字と小文字を区別するファイルシステムが必要ですが、これは NTFS では動作しません。Linux マシンでこれを使用することをお勧めします。

ダウンロードしたら、スクリプトを検証して、Java ランタイム環境GitSubversiongit-svn ユーティリティがインストールされていることを確認することをお勧めします。コマンド プロンプトを開き、次を実行します:

java -jar ~/svn-migration-scripts.jar verify

このコマンドを実行すると、移行処理に必要なプログラムがインストールされていない場合はコンソールにエラーメッセージを表示します。インストールされていないプログラムがある場合は、次に進む前に必ずインストールしてください。

バージョンの決定ができないという警告が表示されたら、export LANG=C (*nix) または SET LANG=C (Windows) を稼働し、再度行ってください。

OS X が稼動しているマシーン上で移行処理を行う場合は、次のような警告も表示されます:

You appear to be running on a case-insensitive file-system. This is unsupported, and can result in data loss.

これについては次のセクションで説明します。

ケースセンシティブなディスクイメージのマウント

Git への移行処理は、リポジトリの破損を防止するためにはケースセンシティブなファイルシステム上で行う必要があります。OS X のファイルシステムはケースセンシティブではないため、移行処理を OS X 上で行う場合は問題が生じます。

ファイルシステムが OS X 以外であれば、直ちにローカル マシーン内に ~/GitMigration という名称のディレクトリを作成します。これは変換を行うためのディレクトリです。その場合はこのセクションの残りはスキップして次のセクションに進んでください。

Git への移行: ディスクイメージのマウント

ファイルシステムが OS X である場合は、svn-migration-scripts.jar 内の create-disk-image スクリプトを使用して、大文字と小文字を区別するディスク イメージをマウントする必要があります。これには 2 つのパラメーターが必要です:

  1. 作成するディスクイメージのサイズ (単位はギガバイト)。このサイズは、移行対象の SVN リポジトリよりも大きいサイズである限り任意の値を指定することができます。
  2. ディスク イメージの名称。このガイドでは、GitMigration という名称を使うこととします。

たとえば、次のコマンドは GitMigration という名称の 5GB のディスク イメージを作成します:

java -jar ~/svn-migration-scripts.jar create-disk-image 5 GitMigration

ディスク イメージはホーム ディレクトリにマウントされているので、ローカル マシンに ~/GitMigration という名称のディレクトリが表示されます。これは、大文字と小文字を区別する仮想ファイルシステムとして機能し、変換された Git リポジトリを保存する場所です。

オーサー情報の抽出

SVN では、各々のコミットにおいて記録されるオーサー情報はユーザー名のみです。一方 Git では、オーサーのフルネームと E メールアドレスを記録します。従って、SVN ユーザー名を Git においてそれに対応する情報にマップするテキストファイルを作成する必要があります。

Git への移行: SVN ユーザー名を Git ユーザー名にマップする。

次のコマンドを実行するとこのテキストファイルを自動的に生成することができます:

cd ~/GitMigration 
java -jar ~/svn-migration-scripts.jar authors <svn_repo_uri> > authors.txt

<svn_repo_uri> の部分は移行対象の SVN リポジトリの URI で置き換えてください。たとえば SVN リポジトリが https://svn.example.com にある場合、実行するコマンドは次のようになります:

java -jar ~/svn-migration-scripts.jar authors https://svn.example.com > authors.txt

このコマンドを実行すると、SVNリポジトリ内のすべてのオーサーのユーザー名、ならびに生成された名前と電子メールアドレスが含まれる authors.txtというテキストファイルが作成されます。このファイルは次のような内容です:

j.doe = j.doe <j.doe@mycompany.com> 
m.smith = m.smith <m.smith@mycompany.com>

等号の右側部分を、対応するユーザーのフルネームと電子メールアドレスに書き換えます。例えば、次のように書き換えます:

j.doe = John Doe <john.doe@atlassian.com>
m.smith = Mary Smith <mary.smith@atlassian.com>

概要

これでマイグレーションスクリプト、ディスクイメージ (OS X のみ)、オーサー情報が揃い、SVN履歴を新たな Git リポジトリにインポートする準備ができました。次のステップでは、この変換機能について説明します。

Git を学習する準備はできていますか?

この対話式チュートリアルを利用しましょう。

今すぐ始める