新潟県最大級のポータイルサイトを情報技術を駆使して盛り上げたい方を募集しています。

BitbucketからGitHubへの移行

新潟の寒さも少し落ち着いてきたかな~的な今日この頃。
社内のインフラ関係を担当しているエンジニアの江村です。

Bitbucketを使っているけど、そろそろGitHubに移行したいな・・・
GitHubの方が利用者多いし、情報もいっぱいあるし、リリースとかテストの自動化を考えるとGitHubの方が使い勝手良さそうだ・・・けど、リポジトリ移行とか面倒そうだな・・・

弊社でもつい最近そんな話があがり、遂にGitHubに移行できました。
今回は実際にGitHubの契約や設定、リポジトリの移行をやってみて、難しかったこと、失敗談なども含め、内容をご紹介していきたいと思います。

前提

今回はチーム開発でプルリクエストなどの運用も必要になる為、以下の有料プランの移行の内容となっています。
※GitHubはプラン改定により、無料プランでの利用領域が大幅に増えましたが、プルリクエストは有料プランじゃないとできない為、弊社では有料プランを契約。

  • Bitbucket Standardプラン ⇒ GitHub Teamプラン

失敗したこと(最初から失敗・・・)

まず、GitHub契約・設定回りで出鼻をくじかれました。
以下、最初にやった流れです。

  1. GitHubの個人アカウント作成(チーム用のアカウントとして作成)
  2. アカウントのプランをアップグレード(この時点で自動的にProプランになった)
  3. BitbucketからGitHubへリポジトリを移行
  4. チームメンバーを追加 ←この時点でメンバー追加が出来ないことに気づく。

いろいろ調べた結果、複数人で利用する場合には下記が必要なことが分かりました。

  • 組織(Organization)の作成
  • Teamプランの契約(組織としてアップグレードする場合に選択できる)

失敗を元に再度チャレンジ(だけどまた失敗・・・)

必要な作業が分かったので再度、以下の流れで設定しました。

  1. 作成した個人アカウントで組織(Organization)を作成(公式マニュアル
  2. 組織のプランをTeamプランにアップグレード

ここまでは順調。
しかし、組織のリポジトリを見ると空っぽ・・・
どうやら、Bitbucketから移行したリポジトリは個人アカウント側で保持しているようで組織には引き継がれないようでした・・・(リポジトリをもう1回移行しなきゃいけないのか・・・)
ただ、いろいろ調べると、個人アカウントを組織に自動変換させることができるという情報がありました。

3度目の正直(今度はうまくいきました!)

気を取り直して、以下の流れで設定しました。

  1. リポジトリを移行した個人アカウントを組織に自動変換(組織となり、リポジトリも問題なし)
  2. 組織のプランをTeamプランにアップグレード
  3. チームメンバーを追加(うまくいきました!)

3度目の正直でうまく設定ができ、チームとしてメンバーも招待することができました。

失敗を経て分かったこと

チーム開発をする為のアカウント設定は以下の流れで設定していくのがセオリーのようです。

  1. GitHubの個人アカウントを作成(チーム用ではなく個人として)
  2. 個人アカウントで組織を作成(チーム開発する用として)
  3. 組織をTeamプランにアップグレード
  4. Bitbucketから組織へリポジトリを移行
  5. チームメンバーを追加(公式マニュアル

その他、今回の対応で得た知識も以降で紹介したいと思います。

組織にチームメンバーを追加(招待)する時の注意点

メンバーを招待する場合に少しハマったのでこちらの手順もご紹介します。
結論からいうと、メンバーライセンスのようなものが必要になります。(有料)
GitHubではseatsというものがあり、それを招待するメンバー数分購入することで下記のように招待するボタン(Invite member)が表示されます。(これで数時間はハマりました・・・)

seats購入画面
メンバー招待画面

BitbucketからGitHubへのリポジトリの移行方法

リポジトリ移行には下記のコマンドを利用しました。(他にもいろいろあるようですが、弊社はこれを使いました。)

$ git clone --mirror <SOURCE_REPOSITORY_URL>
$ cd <REPOSITORY>
$ git push --mirror <DESTINATION_REPOSITORY_URL>

基本的にはこのコマンドですべてのブランチ含め、移行が完了します。
すんなり、すべてのリポジトリを移行できると思いきや、問題が・・・

git pushする際に1ファイルで100MB以上のファイルが存在している場合はプッシュができないようで、その場合は下記のコマンドを使い、ブランチを指定して移行をすることで解決しました。

$ git clone -b <BRANCHE_NAME> <SOURCE_REPOSITORY_URL>
$ cd <REPOSITORY>
$ git push <DESTINATION_REPOSITORY_URL>

弊社の場合、エラーの対象となるリポジトリは全ブランチの移行は断念し、必要なブランチのみ(master、staging)の移行して、そのブランチ内の100MB以上のファイルをコミットしなおし、移行を進めました。

まとめ

最後に今回の重要なポイントをおさらいします。

  • 「失敗を経て分かったこと」の手順(セオリーと思われるものに沿って)で契約、アカウント設定を行う
  • GitHubの組織へのメンバー追加にはseatsの契約が必要
  • リポジトリ移行で–mirrorコマンドを使う場合、100MB以上のファイルはプッシュできないので個別で対処が必要

今回対応してみて、GitHubは管理画面がすべて英語なこともあり、その部分も作業に時間がかかった要因でした。慣れればなんてことないんでしょうが・・・
これから本格的にGitHubを使って開発を進めていく予定ですので、自動デプロイ、自動テスト、GitHub Actionsなどについても今後、ご紹介できればと思います。

仲間を募集しています。

ニューズ・ラインの開発チームでは、アジャイル・スクラムで価値のあるプロダクトを開発したいエンジニアを募集しています。

少しでも興味があれば、お気軽にご連絡ください。