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

やりたいことのまとめ

  1. Mercurialという古い仕組みで管理しているデータを、Gitという新しい仕組みに移したい。
  2. いきなり本番環境(会社の重要な場所)でやると失敗した時に困るので、テスト環境を作って移行が本当にできるか試す。
  3. リモートサーバ(みんなで使うための共有場所)を模擬的に作る。

準備するもの

  • 仮想マシン(VM)3台を用意します。
    • 1台目: Mercurialサーバ(古い仕組みを模した環境)
    • 2台目: Gitサーバ(新しい仕組みを模した環境)
    • 3台目: クライアント(自分が操作する場所)
  • CentOSを全ての仮想マシンにインストールします。インストール方法は前に説明した通りです。
哲学者トニーくん
哲学者トニーくん

1台のサーバ上でやると、手間はかかりませんがネットワーク関連の挙動を確認できないので、できるなら3台準備しましょう!

  • MercurialサーバがHTTP経由で正しく動作するか
    (ブラウザやクライアントツールでアクセス可能か)
  • GitサーバがSSH経由で正しく接続できるか
    (Gitのリモートリポジトリがクライアントからアクセス可能か)

1. Mercurialサーバの作成(古い仕組みの共有場所)

  1. 仮想マシンにログインしたら、以下のコマンドを順番に入力します。
    ① Mercurialとウェブサーバの準備をする
Markdown
# リポジトリの更新:
sudo dnf update -y

# EPELリポジトリの有効化:
sudo dnf install ―y epel-release

# Mercurialのインストール:
sudo dnf install -y mercurial

# Apacheのインストール
sudo dnf install -y httpd
哲学者トニーくん
哲学者トニーくん
  • httpd: httpdは、Apache HTTP Serverのパッケージ名です。Apacheは、最も一般的に使用されているウェブサーバであり、MercurialリポジトリをHTTP経由で公開するために使用されます。
    • Mercurialは、HTTP経由でリポジトリを公開するためにApacheと連携することがよくあります。このコマンドは、Apache HTTPサーバもインストールして、ウェブ経由でMercurialリポジトリにアクセスできるように設定するために必要です。

-y オプション

  • -y は、インストール中に発生する確認をすべて自動的に「はい」にして進めるオプションです。通常、yumコマンドを実行すると、インストールを進める前に確認を求められますが、-yオプションを指定することで、その確認をスキップしてインストールを自動的に進めます。

  ② Mercurial用のリポジトリ(データの入れ物)を作る

Markdown
mkdir /var/hg-repo
cd /var/hg-repo

# カレント直下にtest-repoを作成して、それをレポジトリとする
hg init test-repo

  ③ サンプルデータを作る
  以下を一行ずつ入力してください。

Markdown
cd /var/hg-repo/test-repo
echo "これは最初のファイルです" > file1.txt
hg add file1.txt
hg commit -m "最初のコミット" -u "田中 太郎 <taro@example.com>"
echo "これは2番目のファイルです" > file2.txt
hg add file2.txt
hg commit -m "2つ目のコミット" -u "山田 花子 <hana@example.com>"


  ④ ウェブサーバを使ってMercurialをみんなが使えるようにする

  • 設定ファイルを作ります:

Markdown
sudo vi /etc/httpd/conf.d/mercurial.conf

  • 設定内容を次のように書きます(コピペでもOK)

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

vimファイルの操作
「iキー」:書き込みモード
「Escキー」:コマンドモード
「:wq」:保存して終了

Markdown
Alias /hg "/var/hg-repo"
<Directory "/var/hg-repo">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
哲学者トニーくん
哲学者トニーくん

この設定は、Apache HTTP サーバで Mercurial リポジトリ(またはそのディレクトリ)をウェブ経由でアクセスできるようにするためのものです。具体的には、以下のことを行っています:

1. Alias /hg "/var/hg-repo"

  • Alias ディレクティブは、URLのパスと実際のファイルシステムのパスを関連付けます。この行は、ウェブブラウザからのアクセス時に、URLパス /hg にアクセスすると、実際にはサーバ上のディレクトリ /var/hg-repo にアクセスされるように設定しています。具体的には:
    • ユーザーがウェブブラウザで http://<サーバのIPまたはドメイン>/hg にアクセスすると、実際にはサーバ内の /var/hg-repo フォルダが参照されます。

2. <Directory "/var/hg-repo">

  • <Directory> ディレクティブは、指定したディレクトリに対する設定を行います。ここでは、/var/hg-repo ディレクトリに対する設定を指定しています。このディレクティブ内で行う設定は、そのディレクトリ内のファイルに対して適用されます。

3. Options Indexes FollowSymLinks

  • Options ディレクティブは、ディレクトリに対して許可される操作を定義します。
    • Indexes: ディレクトリにインデックスファイル(例:index.html)がない場合、そのディレクトリ内のファイル一覧を表示することを許可します。これにより、/var/hg-repo 内にインデックスファイルがない場合でも、ディレクトリ内のファイルがリスト表示されます。
    • FollowSymLinks: シンボリックリンクをたどることを許可します。これにより、シンボリックリンクがディレクトリ内にあった場合、そのリンク先も正しく処理されます。

4. AllowOverride None

  • AllowOverride は、.htaccess ファイルを使った設定の上書きに関するオプションです。
    • None: .htaccess ファイルによる設定の上書きを許可しません。このディレクティブが設定されている場合、/var/hg-repo ディレクトリ内に .htaccess ファイルがあっても、設定内容を変更することができません。

5. Require all granted

  • Require は、アクセス制御を行うための設定です。
    • all granted: このディレクティブは、指定されたディレクトリへのアクセスすべてのユーザーに許可することを意味します。つまり、/var/hg-repo ディレクトリに対して、インターネット上の誰でもアクセスできるように設定しています。

  • サーバを再起動

Markdown
sudo systemctl restart httpd

  ⑤ テストする 自分のパソコンのブラウザで次にアクセスします。

Markdown
http://[MercurialサーバのIP]/hg/test-repo
哲学者トニーくん
哲学者トニーくん

サーバが自分のコンピュータ(仮想マシンや物理サーバなど)で動作している場合、以下のコマンドで IP アドレスを確認できます。

ip a

出力の中で「inet」という項目を探します。inetの後に表示されている数字の部分が、そのサーバのIPアドレスです。例えば:

[inet 192.168.1.100/24 brd 192.168.1.255 scope global eth0]

この場合、IPアドレスは 192.168.1.100 です。


2. Gitサーバの作成(新しい仕組みの共有場所)

  1. Mercurialサーバと同じように、仮想マシンにログインして以下を実行します。
  ① Gitの準備をする

Markdown
sudo dnf update -y
sudo dnf install -y git

  ② Git用のリポジトリを作る

Markdown
mkdir /var/git-repo
cd /var/git-repo
git init --bare test-repo.git

  ③ 他のマシンからアクセスできるようにする(SSHを有効にする)

  • SSHを設定します:

Markdown
sudo vi /etc/ssh/sshd_config

  • 次の2行を確認して、必要なら変更します:

Markdown
PermitRootLogin yes
PasswordAuthentication yes
哲学者トニーくん
哲学者トニーくん

1. PermitRootLogin yes

この設定は、SSH経由での root アカウントでのログインを許可するかどうか を制御します。

  • yes の意味: SSHを使って、rootユーザー(管理者権限を持つユーザー)が直接ログインできるようにする。理由・目的:
    • 設定の簡便さ: 特に検証環境や一時的な環境では、rootアカウントで直接ログインできるようにすることで作業が簡単になる。
    • 管理の迅速性: root権限が必要な作業を行う際、一般ユーザーでログインしてから sudo を使う手間が省ける。
    • 短期間でのセットアップ: テスト環境では、セキュリティよりもスピードが優先されるため、rootログインを許可することがある。
  • 注意点: 本番環境ではセキュリティ上のリスクが高いため、PermitRootLogin no に設定するのが一般的です。なぜなら、rootアカウントはハッキング対象になりやすく、強制的なパスワード解析(ブルートフォース攻撃)に対して脆弱になるからです。

2. PasswordAuthentication yes

この設定は、パスワード認証を許可するかどうか を制御します。

  • yes の意味: SSH接続時に、パスワードを使った認証を許可する。理由・目的:
    • 簡単なアクセス: パスワード認証を許可することで、公開鍵認証を設定しなくてもSSH接続が可能になる。
    • 検証環境での利用: テストや検証環境では、公開鍵の管理が面倒な場合が多く、シンプルにパスワードだけでログインできるようにしたほうが手軽。
  • 注意点: 本番環境では、セキュリティ上の理由からパスワード認証を無効にし、代わりに 公開鍵認証 を利用するのが推奨されます。公開鍵認証を利用すると、パスワードが漏洩するリスクを低減できます。

  • サーバを再起動:

Markdown
sudo systemctl restart sshd

  ④ テストする 別の仮想マシンから以下を実行して接続できるか確認:

Markdown
ssh [GitサーバのIP]

3. クライアントの作成(変換ツールを動かす場所)

  1. 仮想マシンにログインして、GitとMercurialの両方をインストールします:

Markdown
sudo dnf update -y
sudo dnf install -y git mercurial

  2. 変換ツール(hg-fast-export)を取得します

Markdown
git clone http://repo.or.cz/r/fast-export.git /tmp/fast-export

4. リポジトリの変換手順

  1. Mercurialリポジトリをクローン クライアントから以下を実行します

Markdown
hg clone http://[MercurialサーバのIP]/hg/test-repo /tmp/hg-repo

  2. 作者情報を抽出して整理する

Markdown
cd /tmp/hg-repo
hg log | grep user: | sort | uniq | sed 's/user: *//' > /tmp/authors

  /tmp/authors /tmp/authors ファイルを編集し、次のように書き直します(例):

Markdown
田中 太郎 <taro@example.com>=Tanaka Taro <taro@example.com>
山田 花子 <hana@example.com>=Yamada Hanako <hana@example.com>

  3. Gitリポジトリを作成して変換する

Markdown
git init /tmp/converted
cd /tmp/converted
/tmp/fast-export/hg-fast-export.sh -r /tmp/hg-repo -A /tmp/authors

  4. 変換後のリポジトリをGitサーバにアップロード

Markdown
git remote add origin ssh://[GitサーバのIP]/var/git-repo/test-repo.git
git push origin --all

5. 変換が成功したかを確認

  1.履歴を確認:

Markdown
git log

→ Mercurialの履歴がすべて移っていれば成功。

  2. ブランチやタグを確認:

Markdown
git branch -a
git tag

  3. 作者情報を確認: 履歴(git log)を見て、作者名とメールアドレスが正しいかを確認します。


これで完了です!

Nobody Compares – One Direction

タイトルとURLをコピーしました