GitHubリポジトリをOrganizationにTransferする方法
個人アカウントで作っていたリポジトリを、後からOrganization(以下org)に移したくなることがあります。GitHubにはリポジトリの**Transfer(移送)**機能があり、Issue・Pull Request・Star などを引き継いだまま所有者を変更できます。ここでは移送先がorgの場合の手順と注意点をまとめます。
1. 事前条件
移送を実行する前に、以下を満たしているか確認します。
- 移送元リポジトリの管理者(admin)権限を持っていること
- 移送先orgでリポジトリを作成できる権限を持っていること(orgのメンバーで、かつorgの設定で「Repository creation」が許可されているか、orgのオーナーであること)
- 移送先orgに同名のリポジトリが存在しないこと。同じフォークネットワークに属するリポジトリが移送先にある場合も不可
- プライベートな上流リポジトリからフォークした単独のフォークは移送できない
- 移送時にリポジトリ名を変更したい場合は、移送先orgのオーナーであること
補足: orgやEnterpriseのオーナーが「リポジトリの移送を禁止する」ポリシーを設定している場合、移送元・移送先どちら側の制限でも移送はブロックされます。
2. Web UIでの手順
- 移送したいリポジトリのページを開き、Settings タブをクリックする
- 一番下の Danger Zone にある Transfer ownership の Transfer ボタンをクリックする
- 「New owner」で Select one of my organizations を選び、移送先のorgを選択する(自分が所属していないorgの場合は Specify an organization or username でorg名を入力する)
- 移送先orgのオーナーであれば、ここで新しいリポジトリ名を指定することもできる
- 移送先のプランによって使えなくなる機能(Protected branches など)の警告が表示されるので確認する
- 確認欄にリポジトリ名を入力し、I understand, transfer this repository をクリックする
移送先が個人アカウントの場合は相手がメールで承諾する必要がありますが、移送先がorgで自分に作成権限がある場合は承諾待ちなしでそのまま移送されます。
3. 移送後にやること
ローカルクローンのリモートURLを更新する
旧URLから新URLへは自動でリダイレクトされるため、更新しなくてもしばらくは動きます。ただし旧URLに同名のリポジトリやフォークを作るとリダイレクトは消えてしまうので、早めに更新しておいた方が安全です。
bash
git remote set-url origin git@github.com:<移送先org名>/<リポジトリ名>.git確認は以下。
bash
git remote -vアクセス権の見直し
移送後は移送先orgのデフォルトのリポジトリ権限が適用されます。元のオーナー(自分)はコラボレーターとして追加されますが、orgのメンバーやチームに必要な権限が付いているかは Settings → Collaborators and teams で確認しておきます。
4. 何が引き継がれ、何が変わるか
| 項目 | 移送後 |
|---|---|
| Issue / Pull Request / Wiki / Star / Watcher | 引き継がれる |
| コミット履歴(Contribution含む) | 引き継がれる |
| Git LFS オブジェクト | 引き継がれる(バックグラウンドで移動するため時間がかかることがある) |
| Webhook / Secrets / Deploy key | 引き継がれる |
| フォーク | 引き継がれる(関連付けは維持される) |
| Issueの担当者(Assignee) | 移送先orgのメンバーのみ維持され、それ以外は解除される |
| Issue Type(org間移送時) | 移送先orgに同名のTypeがあれば維持、なければ削除 |
| GitHub Pages | リポジトリのURLはリダイレクトされるが、PagesサイトのURLはリダイレクトされない |
| GitHub Packages | レジストリによってはリポジトリとの関連付けが外れることがある |
5. その他の注意点
- プライベートリポジトリを GitHub Free のorg に移送すると、Protected branches や GitHub Pages など一部機能が使えなくなる
- GitHub Marketplace に公開しているActionを含むリポジトリ、または直前1週間で100回以上のクローンや GitHub Actions からの利用があったリポジトリは、移送後に旧オーナー名/リポジトリ名の組み合わせが永久に予約され、再利用できなくなる
- org所有のリポジトリを別のorgに移送する場合も手順は同じ。移送元orgのオーナー、またはリポジトリのadmin権限が必要