🙆

GitLabからGitHubに移行します

2022/05/18に公開
2

なぜいまさら移行するのか

現在所属している会社では、入社当初からGitLabが利用されていました。
理由は単純で企業規模も小さいことがあり、なるべくランニングコストをかけたくないという理由から、無償で利用機能が多いものを選定したところ、GitLabになったというわけです。
ところが先日、GitHubActionsのほうが設定しやすそうだなーと徘徊していたところ、GitLab公式の料金ページに以下の記載が...

5 users per namespace

https://about.gitlab.com/pricing/

日本語サイトには、次のような記載なのですが...
有志の方が作成されている次のページにはまだ反映されておらずでした。(2022/05/20修正)

https://www.gitlab.jp/pricing/

真相がわからなくなってしまったため、いろいろと調べてみるとGitLabが上場したことに伴い、Dockerのように有償化範囲を狭めたみたいでした。

社内の名前空間を確認したところ、わかってはいましたが、すべてのリポジトリが制限超過となりますので、移行することにします。

移行先(GitHub)の組織データ作り

GitLabに移行するにあたり、GitHubにチーム的なものを作る必要がありました。
いままでBitBucket、GitLabと使ってきましたが、デファクト的なGitHubとはご縁がなかったので、Organizationってなんぞやってところから確認しました。

https://docs.github.com/ja/organizations/collaborating-with-groups-in-organizations/about-organizations

他とあんまり変わらんってことでサクサクと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 pullgit pushの際にリポジトリやブランチの引数を省略することができます。
-all 全てのブランチを対象にする。

https://git-scm.com/docs/git-push

エラーが出た場合

本当はやりたくないですが、フォースの力(強制力)に頼らざるを得ません。
プッシュ先のリポジトリ全てを上書きしますので、十分に注意して使用するようにしてください。

git push -f -u origin --all

クローンしたリポジトリ(GitHub->Local)のタグを移行先リポジトリ(GitLab)に反映

git push -u origin --tags
オプション 説明
-u –set-upstream の省略版です。
上流ブランチを設定します。
設定することで、git pullgit pushの際にリポジトリやブランチの引数を省略することができます。
-tags 全てのタグを対象にする。

GitHubへの接続はHTTPSの場合はトークンベース認証が必須

しばらく前の変更となりますが、2021 年8月13日以降パスワード認証が利用できなくなりました。

https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/

そのため、HTTPS接続の場合、トークンベース認証を行う必要があります。
※SSH接続の場合は、上記の影響はありません。

https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh

その他

今回は利用しませんでしたが、Issueなどを移行する場合は次のツールを使う方が多いようです。
https://github.com/piceaTech/node-gitlab-2-github


まとめ

手順としては最初に考えていたより、かなりシンプルに移行は出来るんだなといったところです。
Issueなどの移行も必要な場合は、ツールを使う必要があり、場合によっては、PR/MR後のブランチ削除運用を行っていた場合はエラーになってしまうようです。
チームでGitLabを利用している方は、この機会にGitHubに移行する方もいると思いますので、ご参考になれば幸いです。

Discussion

tnirtnir

立場上避けたいところですが、私も(この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.jp ドメインのことを指しているのであれば、GitLab Inc.はその変更に関与しておらず、1個人のサイトですので、ご注意ください。(立場上、私に編集権限は付与されていますが、そのメンテナンスには関与できていません)

ご指摘ありがとうございます。
GitLab Inc.は関与していないサイトということを認識しておりませんでした。
フッタ部に記載されてますね。