1. 概要
株式会社システムアイRGA事業部の福島です。
今回、GitHubリポジトリの移行を実施することとなり、その作業担当として「移行作業は簡単に終わるだろう」と思っていましたが、色々と手続きが多く、ネットで出回っている情報が少なかったので、ここで困った点などを皆さんに共有できればと思い、この記事を書きました。
ただ、公開できない情報もありますので、色々と端折っている部分があります。
2. 要件
- リポジトリに紐づいているWikiやissue、設定もまとめて移行してほしい
- 本番環境に影響がないようにしてほしい
上記が今回の作業の要件となります。
ですので、一度、「Forkして〜〜」という方法を考えていましたが、色々と調査してGitHubの「Transfer」機能を使うことにしました。
Transferの良いところは、移行するリポジトリに紐づくissueや設定を丸ごと、別のアカウントに移行できることです。GitHab Actionsで本番環境を操作しているリポジトリですと、環境変数もそのまま移行でき、無駄にGitHab Actionsを回すことがないので、本番環境の影響を最小限に抑えることができます。
3. 前提
移行作業を実施する前は、移行元と移行先のGitHubアカウントの権限を付与してもらっておきましょう。
私の場合ですと下記の権限を付与してもらっていました。
移行元・・・管理者権限
移行先・・・メンバー権限
4. 作業
4.1. 作業当日
作業当日、指定されたリポジトリ移行作業を進めていきましたが、途中で、「あれ、移行できないリポジトリがある」となりました。
とりあえず、移行できるリポジトリは全て移行し、移行できないリポジトリは残して、一旦作業は終了。
原因調査を開始です。
4.2. 原因調査
それから原因を調査していきました。
そうしますと、上記リンク先のGitHubのTransferのドキュメントに下記の文言がありました。
Single repositories forked from a private upstream network cannot be transferred.
「Fork元の公開範囲がPrivateのリポジトリはTransferできません」とのこと。
本当に申し訳ありませんでした、、、この文言、見逃していました。
実は、リポジトリの一つにForkしたリポジトリがありました。
しかもPrivate。
そのことは知っていたので練習用のリポジトリで検証も行ったのですが、、、公開範囲がPublicにした練習用のリポジトリでしたので、意味がなかったです。
検証用もちゃんと作れという話ですよ、、、こんなことになるとは、、、反省です。
そして、「Fork元がPrivateのリポジトリをTransferで移行する」方法はあるのかという調査を始めました。
4.3. 実現方法の調査
調査の前に「ローカルでForkして、新しいリポジトリを作って、そこにPush」という方法を検討しましたが、実現可能ではあるが、移行の手順の多さや移行前と移行後の設定の保証を考えるとTransferが良いとのこと。
その中でTransferを使った移行方法を調査したところ、下記リンク先の記事を見つけました。
解決策としては、「GitHubサポートに連絡する」とのこと。
下記リンク先の「Forkを切り離す」から英語でGitHubサポートに依頼しました。
https://support.github.com/request/fork
上記リンク先を参考に下記の文言でサポートに依頼。
Hello, I'm takahiro fukushima from SystemI co.
In the below repository, I'like to unfork and turn it into a standalone repository.
・ https:// Forkの関連を切り離したリポジトリのURLを記載
and I never merge to 「https:// Fork元のリポジトリのURLを記載」 .
Finally I want to Transfer it, so I’m not able to do like Help Page that git clone and create new repository ….
Thank you for being patient with my English.
大まかに「Forkを切り離してほしい。ただFork元とマージはしない。」という内容です。
8時間後に返信がありましたが、「あなたにはFork元のアカウントの権限がないので、Forkの切り離しができません。Fork元から管理者権限を付与してもらうか、Fork元に切り離しを依頼してもらうかのどちらかでお願いします」とのこと。
ということで、今回はFork元のアカウントに切り離しの依頼をお願いしてもらう方法で対応し、それから8時間後、無事Forkの切り離しを確認できました。
その後の移行作業も無事完了しました。
最後に
基本的に開発でしかGitHubを使わないので、Forkであったりリポジトリの移行であったりは、全く分からない状況からのスタートでした。
思ったより権限や本番環境への影響を考えることが多く、情報が少ない作業を担当することができ、会社と自分にも知見が溜まったかと思います。
もし何かご指摘等ありましたら、コメント等でご連絡いただけるとありがたいです。
よろしくお願いいたします。