GitHub レポジトリをエクスポートする
やりたいこと
GitHub レポジトリの以下のデータをエクスポートしたい。
- コード等(Git レポジトリ)
- Wiki
- issues, PRs, それらに対するコメント
- issues, PRs への添付ファイル
背景
現在、GitHub の旧プランを使っています。旧プランはレポジトリ数によって金額が変わるので、終了したプロジェクトのものなど、使ってないレポジトリはエクスポートした上で削除したいです。(ちなみに、GitHub の現行のプランは、ユーザー数による課金なのでレポジトリ数は関係ありません。)
上述の1, 2は、通常の Git レポジトリなので、git clone
して保存しておけば良いのですが、それ以外は別の方法が必要です。
やったこと概要
GitHub の Migrations API というものを使用しました。ドキュメントは以下のものを参照しました。
基本的にはこの手順通りですが、少し補足しつつ記載します。
詳細手順
Personal Access Token の取得
以下のページより、個人用のアクセストークンを生成します。
必要な権限は
- admin:org
- repo
です。
以降、シェル上で作業をするので、取得したアクセストークンは変数に設定しておきます。
GITHUB_ACCESS_TOKEN=nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
エクスポート処理の開始
以下の通り、Migrations API のエンドポイントに POST リクエストを送ることで、エクスポート処理が開始されます。その際に、lock_repositories
を true にして、レポジトリをロックすることが推奨されてます。
curl -H "Authorization: token $GITHUB_ACCESS_TOKEN" -X POST \
-H "Accept: application/vnd.github.wyandotte-preview+json" \
-d'{"lock_repositories":true,"repositories":["orgname/repo1", "orgname/repo2"]}' \
https://api.github.com/orgs/:orgname/migrations
結果は以下のような JSON が帰ってきますので、id を控えておきます。以下の例であれば 79 です。レポジトリID (1296269)ではないので注意して下さい。
https://developer.github.com/v3/migrations/orgs/#response
ステータスの確認
エクスポート処理は時間がかかるので、以下のコマンドで終了したか確認して下さい。
curl -H "Authorization: token $GITHUB_ACCESS_TOKEN" \
-H "Accept: application/vnd.github.wyandotte-preview+json" \
https://api.github.com/orgs/:orgname/migrations/:id
ステータスが exported
になるまで待ちます。
パラメータの :id
のところは、先ほどの例で言えば 79 です。
ダウンロード
以下のコマンドでダウンロードします。
curl -H "Accept: application/vnd.github.wyandotte-preview+json" \
-u username:$GITHUB_ACCESS_TOKEN \
-L -o migration_archive.tar.gz \
https://api.github.com/orgs/:orgname/migrations/:id/archive
username
のところは自分の GitHub ユーザー名、:id
は、今回の例では 79 です。
アーカイブの削除
アーカイブは7日後に自動的に削除されますが、気になる人は手動で削除します。
curl -H "Authorization: token $GITHUB_ACCESS_TOKEN" -X DELETE \
-H "Accept: application/vnd.github.wyandotte-preview+json" \
https://api.github.com/orgs/:orgname/migrations/:id/archive
ロックの解除、レポジトリの削除
無事エクスポートデータをダウンロード出来たら、一応データの中身を軽く確認した後、レポジトリのロックを解除して、その後にレポジトリを削除します。
ロックの解除は以下の通りです。
curl -H "Authorization: token $GITHUB_ACCESS_TOKEN" -X DELETE \
-H "Accept: application/vnd.github.wyandotte-preview+json" \
https://api.github.com/orgs/:orgname/migrations/:id/repos/:reponame/lock
その後、画面からレポジトリを削除します。
まとめ
Migrations API は、本来は GitHub から GitHub Enterprise への移行用に用意されているようですが、レポジトリのアーカイブ・バックアップのために使う事ができます。
今回は、Personal Access Token の取得方法から同 API を使ったレポジトリのバックアップ方法を説明しました。
ちなみに、調べてみませんが、これを Bitbucket とかにインポートするツールとかもあるのかもしれません。
コメントを残す