準備
SVN から Git ベースのバージョン管理に移行する最初のステップとして、移行推進担当者のローカルマシーンを整備します。このステップでは、便利なユーティリティスクリプトをダウンロードし、(必要に応じて) ケースセンシティブなファイルシステムをマウントし、SVN のオーサー情報を Git にマップします。
これ以降の作業はすべて移行推進担当者のローカルマシーン上で実行します。
移行処理スクリプトのダウンロード
Git には SVN リポジトリのインポートに必要なツールのほとんどが付属していますが、アトラシアンが便利な JAR ファイルにまとめた機能の一部が不足しています。このファイルは移行に不可欠なものですので、アトラシアンの Bitbucket アカウントから svn-migration-scripts.jar
を必ずダウンロードしてください。このガイドでは、このファイルがホーム ディレクトリに保存されているものとします。免責事項: svn の移行には、大文字と小文字を区別するファイルシステムが必要ですが、これは NTFS では動作しません。Linux マシンでこれを使用することをお勧めします。
ダウンロードしたら、スクリプトを検証して、Java ランタイム環境、Git、Subversion、git-svn ユーティリティがインストールされていることを確認することをお勧めします。コマンド プロンプトを開き、次を実行します:
java -jar ~/svn-migration-scripts.jar verify
このコマンドを実行すると、移行処理に必要なプログラムがインストールされていない場合はコンソールにエラーメッセージを表示します。インストールされていないプログラムがある場合は、次に進む前に必ずインストールしてください。

関連資料
Git リポジトリ全体を移動する方法

ソリューションを見る
Bitbucket Cloud での Git の使用方法についてのチュートリアルです。
バージョンの決定ができないという警告が表示されたら、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
という名称のディレクトリを作成します。これは変換を行うためのディレクトリです。その場合はこのセクションの残りはスキップして次のセクションに進んでください。
ファイルシステムが OS X である場合は、svn-migration-scripts.jar
内の create-disk-image
スクリプトを使用して、大文字と小文字を区別するディスク イメージをマウントする必要があります。これには 2 つのパラメーターが必要です:
1. 作成するディスクイメージのサイズ (単位はギガバイト)。このサイズは、移行対象の SVN リポジトリよりも大きいサイズである限り任意の値を指定することができます。
2. The name of the disk image. This guide uses GitMigration
for this value.
たとえば、次のコマンドは GitMigration
という名称の 5GB のディスク イメージを作成します:
java -jar ~/svn-migration-scripts.jar create-disk-image 5 GitMigration
ディスク イメージはホーム ディレクトリにマウントされているので、ローカル マシンに ~/GitMigration
という名称のディレクトリが表示されます。これは、大文字と小文字を区別する仮想ファイルシステムとして機能し、変換された Git リポジトリを保存する場所です。
オーサー情報の抽出
SVN では、各々のコミットにおいて記録されるオーサー情報はユーザー名のみです。一方 Git では、オーサーのフルネームと E メールアドレスを記録します。従って、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 リポジトリにインポートする準備ができました。次のステップでは、この変換機能について説明します。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。

Bitbucket ブログ

DevOps ラーニング パス
