GitLabからGitHubに移行します
なぜいまさら移行するのか
現在所属している会社では、入社当初からGitLabが利用されていました。
理由は単純で企業規模も小さいことがあり、なるべくランニングコストをかけたくないという理由から、無償で利用機能が多いものを選定したところ、GitLabになったというわけです。
ところが先日、GitHubActionsのほうが設定しやすそうだなーと徘徊していたところ、GitLab公式の料金ページに以下の記載が...
5 users per namespace
日本語サイトには、次のような記載なのですが...
有志の方が作成されている次のページにはまだ反映されておらずでした。(2022/05/20修正)
真相がわからなくなってしまったため、いろいろと調べてみるとGitLabが上場したことに伴い、Dockerのように有償化範囲を狭めたみたいでした。
社内の名前空間を確認したところ、わかってはいましたが、すべてのリポジトリが制限超過となりますので、移行することにします。
移行先(GitHub)の組織データ作り
GitLabに移行するにあたり、GitHubにチーム的なものを作る必要がありました。
いままでBitBucket、GitLabと使ってきましたが、デファクト的なGitHubとはご縁がなかったので、Organizationってなんぞやってところから確認しました。
他とあんまり変わらんってことでサクサクとOrganizationを作成。
リポジトリの移行
おそらく本題的な部分です。
リポジトリ移行については次の流れで対応しています。
- 移行先(GitHub)にリポジトリ作成
- 移行元(GitLab)のリポジトリクローン
- クローンしたリポジトリ(GitHub->Local)を移行先リポジトリ(GitLab)に反映
- クローンしたリポジトリ(GitHub->Local)のタグを移行先リポジトリ(GitLab)に反映
移行先(GitHub)にリポジトリ作成
Organizationを事前に作成しているので、個人リポジトリではなく、Organizationリポジトリを作成していきます。
サクサクと進めていきます。
移行元(GitLab)のリポジトリクローン
以下はGitLabJPのリポジトリですが、移行元リポジトリのURLをコピーして、クローンします。
git clone [移行元リポジトリURL]
クローンしたリポジトリ(GitHub->Local)のリモートリポジトリを設定
クローンしたリポジトリのリモートリポジトリを更新します。
git remote set-url origin [移行先リポジトリURL]
次のコマンドでリモートリポジトリの確認ができます。
git remote -v
クローンしたリポジトリ(GitHub->Local)を移行先リポジトリ(GitLab)に反映
git push -u origin --all
オプション | 説明 |
---|---|
-u | –set-upstream の省略版です。 上流ブランチを設定します。 設定することで、 git pull やgit push の際にリポジトリやブランチの引数を省略することができます。 |
-all | 全てのブランチを対象にする。 |
エラーが出た場合
本当はやりたくないですが、フォースの力(強制力)に頼らざるを得ません。
プッシュ先のリポジトリ全てを上書きしますので、十分に注意して使用するようにしてください。
git push -f -u origin --all
クローンしたリポジトリ(GitHub->Local)のタグを移行先リポジトリ(GitLab)に反映
git push -u origin --tags
オプション | 説明 |
---|---|
-u | –set-upstream の省略版です。 上流ブランチを設定します。 設定することで、 git pull やgit push の際にリポジトリやブランチの引数を省略することができます。 |
-tags | 全てのタグを対象にする。 |
GitHubへの接続はHTTPSの場合はトークンベース認証が必須
しばらく前の変更となりますが、2021 年8月13日以降パスワード認証が利用できなくなりました。
そのため、HTTPS接続の場合、トークンベース認証を行う必要があります。
※SSH接続の場合は、上記の影響はありません。
その他
今回は利用しませんでしたが、Issueなどを移行する場合は次のツールを使う方が多いようです。
まとめ
手順としては最初に考えていたより、かなりシンプルに移行は出来るんだなといったところです。
Issueなどの移行も必要な場合は、ツールを使う必要があり、場合によっては、PR/MR後のブランチ削除運用を行っていた場合はエラーになってしまうようです。
チームでGitLabを利用している方は、この機会にGitHubに移行する方もいると思いますので、ご参考になれば幸いです。
Discussion
立場上避けたいところですが、私も(この1年以内に)必要なことがあり、 https://github.com/piceaTech/node-gitlab-2-github を使って移行を進めました。その際は、こちらのツール単体で使ったか記憶がないのですが、GitHubのRepoを自動で作ってやるようにしたことで、force pushを実行することを回避できました。
既に移行判断は完了しているのでよいと思いますが、読者のためにもコメントさせていただくと、基準はトップレベルのグループ単位での課金になります。プロジェクト(GitLabにおける「リポジトリ」に相当)単位ではありません。
https://gitlab.com/groups/gitlab-org/-/usage_quotas#seats-quota-tab (
gitlab-org
を適宜書き換えてください) から確認できる値が正確かと思います。こちらの記事で言う日本語サイトというのが
gitlab.jp
ドメインのことを指しているのであれば、GitLab Inc.はその変更に関与しておらず、1個人のサイトですので、ご注意ください。(立場上、私に編集権限は付与されていますが、そのメンテナンスには関与できていません)ご指摘ありがとうございます。
GitLab Inc.は関与していないサイトということを認識しておりませんでした。
フッタ部に記載されてますね。