GitLab のインストール・設定シリーズ第3回目の今回は、Git リポジトリの移行を行います。
(移行元と移行先はサーバー(EC2インスタンス)が別)
その他の記事は、以下をご覧下さい。
第1回(AWS EC2 に GitLab をインストールする)
第2回(AWS EC2 に GitLab をインストールする(メールの送信テスト編))
では、早速Git リポジトリの移行を始めて行こうと思います。
1)GitLab にリポジトリ(プロジェクト)を作成する。
作成の手順は記載しませんが、前もって移行するリポジトリと同じ名前で、GitLab プロジェクト(=リポジトリ)を作成しておく必要があります。
ちなみに、GitLab では、ユーザー、またはグループに属する形でプロジェクトが作成されます。
なので弊社の場合、共有リポジトリ用グループ(例:hogehoge-dev)を作成し、
開発者用のプロジェクトは全て hogehoge-dev に属する様に作成しています。
※あくまで置き場所として用意しているだけなので、権限設定に関しては、
別のグループ等を作成し、プロジェクト単位にグループへの権限付与を行なっています。
以降の説明を簡単にする為に、各設定の名称を以下と仮定します。
・旧Gitが存在しているサーバー : old.hoge.co.jp
・移行したいリポジトリ名 : RipoTest.git
・GitLab(新Git)が存在しているサーバー : new.hoge.co.jp
・GitLab のグループ : hogehoge-dev
・GitLab のプロジェクト名 : RipoTest
2)旧リポジトリをクローンする
続いて旧リポジトリをクローンします。(今回、作業は、ローカル(Mac)側のターミナルで行なっています。)
sshで接続するので、旧サーバー側の鍵が必要になります。
鍵は、Macだと「/Users/mac_user/.ssh」に格納します。
※[mac_user]は、現在Macにログインしているユーザーです。
そして、コマンドを簡略化させる為に、同じディレクリに「config」というファイルを作成し、
Host config_name_1 User connect_user HostName old.hoge.co.jp IdentityFile ~/.ssh/old_hoge_key_name上記の内容を記述します。
Host : コマンドに含める簡略名になります。
User : 接続するサーバーのユーザー
HostName : 接続するサーバー
IdentityFile : 使用する鍵の場所
これで準備が出来たので、早速クローンします。
$ git clone --mirror ssh://config_name_1/RipoTest.git「mirror」を付ける事によって、履歴を含めたリポジトリのバックアップを取る感じでクローン出来ます。
3)GitLab(新Git)へプッシュする
続いて、先程クローンしたリポジトリをGitLab(新Git)へプッシュします。こちらも先程と同じ様に、「config」を設定します。
Host config_name_2 User git HostName new.hoge.co.jp IdentityFile ~/.ssh/new_hoge_key_name※GitLabをインストールした時に、「git」ユーザーが作成されています。
これで準備が出来たので、早速プッシュします。
git push --mirror ssh://config_name_2/hogehoge-dev/RipoTest.git「mirror」を付けること、そして、GitLab のグループ名をリポジトリ名の前に付ける事を忘れずに。
これで大抵のリポジトリは問題無くプッシュ出来るのですが、リポジトリの容量が大きいと・・・
Counting objects: 7400, done. Delta compression using up to 8 threads. Compressing objects: 100% (6246/6246), done. Writing objects: 100% (7400/7400), 558.97 MiB | 6.24 MiB/s, done. Total 7400 (delta 2794), reused 3512 (delta 452) remote: fatal: Out of memory, malloc failed (tried to allocate 228733096 bytes) error: unpack failed: index-pack abnormal exit To ssh://config_name_2/hogehoge-dev/RipoTest.git ! [remote rejected] master -> master (unpacker error) error: failed to push some refs to 'ssh://config_name_2/hogehoge-dev/RipoTest.git'と、エラーになる事があります。
これ、中々解決出来ず、ちょっとハマったのですが、
結論から言うと、プッシュ先(ここで言うとGitLabがインストールしてある「new.hoge.co.jp」)のメモリを増やす事で解決しました。(*1)
*1) プッシュ先のEC2 インスタンスを「t2.medium」から「t2.large」に一時的に変更しました。
弊社の場合、プッシュが全て終わったら、「t2.medium」へ戻しています。
「t2.large」は料金が高いので・・・。
これでリポジトリの移行が完了です。
AWS , EC2 , GitLab , Linux
0 件のコメント:
コメントを投稿