
【9秒チャレンジ】
1. 検証サーバ(仮想マシン)の作成
2. Mercurial 環境の構築(インストール、初期設定・リポジトリ作成)
3. Git 環境の構築(インストール、初期設定・リポジトリ作成)
4. Mercurial から Git への移行準備(hg-fast-export のインストール
5. Mercurial リポジトリの Git への変換(Mercurial リポジトリをクローン、Git リポジトリの初期化、hg-fast-export を使用して変換、Git リポジトリに変換結果を反映)
6. 移行後の確認(Git リポジトリの履歴を確認、ファイルの内容を確認)
って感じです!では、詳しく見ていきましょう!
1. 検証用環境の準備
1. ISOメディアのダウンロード

2. Oracle VM VirtualBoxの設定

では、VirtualBox上での操作をしていきます。
- VirtualBox を起動し、
新規
ボタンをクリックします。 - 以下を入力:
- 名前: 任意(例:
CentOS_VM
) - タイプ: Linux
- バージョン: Red-Hat (64bit)
- 名前: 任意(例:

タイプとバージョンはデフォルトではWindows~となっています。埋まっているからいいやとスキップしないように注意しましょう!
- メモリサイズ: 推奨値は 2GB (2048MB) 以上。
- 仮想ハードディスクの作成:
仮想ハードディスクを作成する
を選択し、次へ進む。- ディスクタイプ: VDI (VirtualBox Disk Image) を選択。
- ストレージ割り当て: 可変サイズを選択。
- ディスクサイズ: 20GB 以上推奨。
- 作成した仮想マシンを選択し、
設定
をクリックします。 - ストレージ タブを選択:
コントローラー: IDE
の下にある空
を選択。ディスクアイコン
をクリックし、ダウンロードした CentOS の ISO ファイルを選択。
- ネットワーク設定:
ネットワーク
タブを開き、アダプター 1 をブリッジアダプター に設定(ホストPCと仮想マシンの通信を可能にする)。

デフォルトではNATになっているが、これだと仮想マシン間でのみしか通信ができません。
3. インストール設定

では、仮想マシンが起動させCentOSの設定をしていきます。
CentOSが起動した初期画面ではテストモードかどうかを選択します。白い文字になっているところが選択している項目です。間違えないように注意しましょう。
- 言語選択:
- 日本語 (または英語) を選択。
2. インストール先:
- デフォルトの仮想ディスクを選択。
3. ネットワークとホスト名:
- ネットワークを有効化して、インターネット接続を確認。
4. ソフトウェア選択:
- Server with GUIまたはMinimal Installを選択。

Server with GUIはサーバー用途にもデスクトップ用途にも対応可能で、初心者にはお勧めです。
5. root パスワード: 管理者ユーザー (root) のパスワードを設定。
- この際に『パスワードによるrootSSHログインを許可』という欄にチェックを入れます。

「パスワードで SSH を許可」の意味:
この設定を有効にすると、リモートから root ユーザーによる直接ログインを禁止するSSH を使用してログインする際に パスワード認証 を許可します。
無効にすると、公開鍵認証 のみでログイン可能になり、セキュリティが強化されます。
「root アカウントをロック」の意味
「root アカウントをロック」のオプションは、root ユーザーによる直接ログインを禁止する設定です。セキュリティの観点からは推奨される設定ですが、検証環境や用途によって判断が異なります。

検証やテスト環境くらいの用途だったら「パスワードで SSH を有効/root アカウントをロックは無効」にして初期設定をスムーズに進めていきましょう。
2. Mercurial 環境の構築
必要なツールのインストール
yumの代わりにdnfを使う
# EPELリポジトリを有効にすることで、公式リポジトリには含まれていないソフトウェアパッケージをインストールできるようになります。
dnf install -y epel-release
dnf install -y python-devel python-pip
pip install -U pip #pipのアップグレード
pip install mercurial #mercurialのインストール
hg --version # バージョン確認
Mercurial リポジトリの作成と初期設定
Mercurial の動作確認用にリポジトリを作成します。
# テスト用のディレクトリを作成
mkdir ~/hg_test_repo
cd ~/hg_test_repo
# Mercurial リポジトリを初期化
# カレントディレクトリに移行のバージョン履歴を保存するための.hgを作成する
hg init
# サンプルファイルを作成
echo "Hello, Mercurial!" > file.txt
# 追跡対象ファイルの追加
hg add file.txt
# バージョン履歴として保存
hg commit -m "Initial commit"
3. Git 環境の構築
必要なツールのインストール
sudo dnf install -y git
git --version #バージョン確認
Git リポジトリの作成と初期設定
Git 側の動作確認用にリポジトリを作成します。
# テスト用のディレクトリを作成
mkdir ~/git_test_repo
cd ~/git_test_repo
# Git リポジトリを初期化
git init
# サンプルファイルを作成してコミット
echo "Hello, Git!" > file.txt
git add file.txt
git commit -m "Initial commit"
4. Mercurial から Git への移行準備
ステップ 1: 変換ツールを取得する
なぜ必要?
Hg のデータを Git の形式に変換するために、特別なツールが必要です。この場合、hg-fast-export
という便利なツールを使います。
hg-fast-export のダウンロード
$ git clone http://repo.or.cz/r/fast-export.git /tmp/fast-export
#別パターン
git clone https://github.com/frej/fast-export.git
cd fast-export
どういうこと?
git clone
は「インターネットからコードをダウンロードするコマンド」。/tmp/fast-export
はツールの保存先の場所(/tmp
は一時的なフォルダ)。
実行すると、/tmp/fast-export
フォルダにツールがダウンロードされます。
ステップ 2: Hg リポジトリをコピーする
なぜ必要?
変換作業中に失敗した場合でも元データが残るよう、Hg のリポジトリをローカル(自分のコンピュータ)にコピーします。
手順
次のコマンドを入力します:
hg clone <remote repo URL> /tmp/hg-repo
どういうこと?
hg clone
は、リモート(インターネット上など)の Hg リポジトリをローカルにコピーするコマンド。<remote repo URL>
には、変換したい Hg リポジトリの URL を入力します。/tmp/hg-repo
はコピー先のフォルダ。
例えば:
hg clone https://example.com/mercurial-repo /tmp/hg-repo
ステップ 3: 作者情報(author)の確認
なぜ必要?
Hg と Git では、変更を加えた人(作者)の名前やメールアドレスの形式に違いがあります。Git に正しくデータを移行するために、作者情報を整理します。
手順
以下のコマンドを順に入力します:
- Hg のリポジトリに移動:
$ cd /tmp/hg-repo
2. 作者情報を抜き出して整理:
hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors
どういうこと?
hg log
:- Hg リポジトリの全履歴を表示します。
grep user:
:- 履歴の中から「user:」と書かれた部分(作者情報)だけを取り出します。
sort
:- 同じ名前が複数出てきても、きれいに並べ替えます。
uniq
:- 重複する名前を1つだけにします。
sed 's/user: *//'
:- 「user:」という文字を削除して、名前やメールアドレスだけを残します。
> ../authors
:- 結果を
/tmp/authors
というファイルに保存します。
- 結果を
ステップ 4: データ変換の実行
コマンド
次のコマンドを入力します:
gitリポジトリを作成したディレクトリで実行する
cd git_test_repo
/tmp/fast-export/hg-fast-export.sh -r /hg_test_repo -A /tmp/authors
オプションの説明:
-r
: 変換元の Hg リポジトリを指定します。- 今回は
/hg_test_repo
。
- 今回は
-A
: 作者情報マッピングファイルを指定します。- 今回は
/tmp/authors
。
- 今回は
移行後の確認
- Git リポジトリの履歴を確認
Mercurial のコミット履歴が Git に正しく移行されていることを確認します。
git log
ファイルの内容を確認
ファイルが正しく移行されているか確認します。
ls
cat file.txt
7. 本番環境への適用
検証環境で移行が成功したら、本番環境で以下を実施します。
- Mercurial のバックアップを取得。
- 検証時の手順を再現。
- 本番用の Git リポジトリをリモート (GitHub や GitLab) にプッシュ。
8. 注意点
- 大規模リポジトリの移行
Mercurial のリポジトリが大規模な場合、変換処理が時間がかかる可能性があります。
必要であればサーバーのリソースを増強してください。 - ファイル名のケース感知
Mercurial はファイル名の大文字小文字を区別しますが、Git の場合 OS に依存するため注意が必要です。 - コミット履歴の保持
hg-fast-export を使用することで、コミット履歴は保持されます。ただし、特定のブランチ構造が正確に反映されない可能性があります。