【1台の検証サーバで構築】MercurialからGitへの移行手順を9秒で理解!

哲学者トニーくん
哲学者トニーくん

【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メディアのダウンロード

Download - The CentOS Project
isoイメージ

2. Oracle VM VirtualBoxの設定

哲学者トニーくん
哲学者トニーくん

では、VirtualBox上での操作をしていきます。

  1. VirtualBox を起動し、新規 ボタンをクリックします。
  2. 以下を入力:
    • 名前: 任意(例: CentOS_VM
    • タイプ: Linux
    • バージョン: Red-Hat (64bit)
哲学者トニーくん
哲学者トニーくん

タイプバージョンはデフォルトではWindows~となっています。埋まっているからいいやとスキップしないように注意しましょう!


  1. メモリサイズ: 推奨値は 2GB (2048MB) 以上。
  2. 仮想ハードディスクの作成:
    • 仮想ハードディスクを作成する を選択し、次へ進む。
    • ディスクタイプ: VDI (VirtualBox Disk Image) を選択。
    • ストレージ割り当て: 可変サイズを選択。
    • ディスクサイズ: 20GB 以上推奨。

  1. 作成した仮想マシンを選択し、設定 をクリックします。
  2. ストレージ タブを選択:
    • コントローラー: IDE の下にある を選択。
    • ディスクアイコン をクリックし、ダウンロードした CentOS の ISO ファイルを選択。
  3. ネットワーク設定:
    • ネットワーク タブを開き、アダプター 1 をブリッジアダプター に設定(ホストPCと仮想マシンの通信を可能にする)。
哲学者トニーくん
哲学者トニーくん

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

3. インストール設定

哲学者トニーくん
哲学者トニーくん

では、仮想マシンが起動させCentOSの設定をしていきます。

CentOSが起動した初期画面ではテストモードかどうかを選択します。白い文字になっているところが選択している項目です。間違えないように注意しましょう。

  1. 言語選択:
  • 日本語 (または英語) を選択。

 2. インストール先:

  • デフォルトの仮想ディスクを選択。

 3. ネットワークとホスト名:

  • ネットワークを有効化して、インターネット接続を確認。

 4. ソフトウェア選択:

  • Server with GUIまたはMinimal Installを選択。
哲学者トニーくん
哲学者トニーくん

Server with GUIサーバー用途にもデスクトップ用途にも対応可能で、初心者にはお勧めです。

 5. root パスワード: 管理者ユーザー (root) のパスワードを設定。

  • この際に『パスワードによるrootSSHログインを許可』という欄にチェックを入れます。
rootユーザ作成
パスワードによるrootSSHログインを許可/root アカウントをロックは無効

「パスワードで SSH を許可」の意味:
この設定を有効にすると、リモートから root ユーザーによる直接ログインを禁止するSSH を使用してログインする際に パスワード認証 を許可します。
無効にすると、公開鍵認証 のみでログイン可能になり、セキュリティが強化されます。

「root アカウントをロック」の意味
「root アカウントをロック」のオプションは、root ユーザーによる直接ログインを禁止する設定です。セキュリティの観点からは推奨される設定ですが、検証環境や用途によって判断が異なります。

哲学者トニーくん
哲学者トニーくん

検証やテスト環境くらいの用途だったら「パスワードで SSH を有効/root アカウントをロックは無効」にして初期設定をスムーズに進めていきましょう。

2. Mercurial 環境の構築

必要なツールのインストール

yumの代わりにdnfを使う

Markdown
# EPELリポジトリを有効にすることで、公式リポジトリには含まれていないソフトウェアパッケージをインストールできるようになります。
dnf install -y epel-release

dnf install -y python-devel python-pip

pip install -U pip  #pipのアップグレード
pip install mercurial #mercurialのインストール
hg --version # バージョン確認
CentOS 7へのMercurialインストールについて | Works | URAMIRAIKAN
1020のなれの果て (since 2005.6.19)

Mercurial リポジトリの作成と初期設定

Mercurial の動作確認用にリポジトリを作成します。

Markdown
# テスト用のディレクトリを作成
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 環境の構築

必要なツールのインストール

Markdown
sudo dnf install -y git
git --version #バージョン確認

Git リポジトリの作成と初期設定

Git 側の動作確認用にリポジトリを作成します。

Markdown
# テスト用のディレクトリを作成
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 のダウンロード

Markdown
$ 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 のリポジトリをローカル(自分のコンピュータ)にコピーします。

手順

次のコマンドを入力します:

Markdown
hg clone <remote repo URL> /tmp/hg-repo

どういうこと?

  • hg clone は、リモート(インターネット上など)の Hg リポジトリをローカルにコピーするコマンド。
  • <remote repo URL> には、変換したい Hg リポジトリの URL を入力します。
  • /tmp/hg-repo はコピー先のフォルダ。

例えば:

Markdown
hg clone https://example.com/mercurial-repo /tmp/hg-repo

ステップ 3: 作者情報(author)の確認

なぜ必要?

Hg と Git では、変更を加えた人(作者)の名前やメールアドレスの形式に違いがあります。Git に正しくデータを移行するために、作者情報を整理します。

手順

以下のコマンドを順に入力します:

  1. Hg のリポジトリに移動:
Markdown
$ cd /tmp/hg-repo

 2. 作者情報を抜き出して整理:

Markdown
hg log | grep user: | sort | uniq | sed 's/user: *//' > ../authors

どういうこと?

  1. hg log:
    • Hg リポジトリの全履歴を表示します。
  2. grep user::
    • 履歴の中から「user:」と書かれた部分(作者情報)だけを取り出します。
  3. sort:
    • 同じ名前が複数出てきても、きれいに並べ替えます。
  4. uniq:
    • 重複する名前を1つだけにします。
  5. sed 's/user: *//':
    • 「user:」という文字を削除して、名前やメールアドレスだけを残します。
  6. > ../authors:
    • 結果を /tmp/authors というファイルに保存します。

ステップ 4: データ変換の実行

コマンド

次のコマンドを入力します:

gitリポジトリを作成したディレクトリで実行する

Markdown
cd git_test_repo
Markdown
/tmp/fast-export/hg-fast-export.sh -r /hg_test_repo -A /tmp/authors

オプションの説明:

  • -r: 変換元の Hg リポジトリを指定します。
    • 今回は /hg_test_repo
  • -A: 作者情報マッピングファイルを指定します。
    • 今回は /tmp/authors

移行後の確認

  1. Git リポジトリの履歴を確認
    Mercurial のコミット履歴が Git に正しく移行されていることを確認します。
Markdown
git log

ファイルの内容を確認
ファイルが正しく移行されているか確認します。

Markdown
ls
cat file.txt

7. 本番環境への適用

検証環境で移行が成功したら、本番環境で以下を実施します。

  1. Mercurial のバックアップを取得。
  2. 検証時の手順を再現。
  3. 本番用の Git リポジトリをリモート (GitHub や GitLab) にプッシュ。

8. 注意点

  • 大規模リポジトリの移行
    Mercurial のリポジトリが大規模な場合、変換処理が時間がかかる可能性があります。
    必要であればサーバーのリソースを増強してください。
  • ファイル名のケース感知
    Mercurial はファイル名の大文字小文字を区別しますが、Git の場合 OS に依存するため注意が必要です。
  • コミット履歴の保持
    hg-fast-export を使用することで、コミット履歴は保持されます。ただし、特定のブランチ構造が正確に反映されない可能性があります。

参考サイト

Mercurialのインストール
CentOS 7へのMercurialインストールについて | Works | URAMIRAIKAN
1020のなれの果て (since 2005.6.19)
hg-fast-exportの使い方
Git - Git へ移行する
10,000 Hours – Dan+Shay&Justin Bieber
タイトルとURLをコピーしました