GitHub レポジトリをエクスポートする

GitHub レポジトリをエクスポートする

やりたいこと

GitHub レポジトリの以下のデータをエクスポートしたい。

  1. コード等(Git レポジトリ)
  2. Wiki
  3. issues, PRs, それらに対するコメント
  4. issues, PRs への添付ファイル

背景

現在、GitHub の旧プランを使っています。旧プランはレポジトリ数によって金額が変わるので、終了したプロジェクトのものなど、使ってないレポジトリはエクスポートした上で削除したいです。(ちなみに、GitHub の現行のプランは、ユーザー数による課金なのでレポジトリ数は関係ありません。)

上述の1, 2は、通常の Git レポジトリなので、git clone して保存しておけば良いのですが、それ以外は別の方法が必要です。

やったこと概要

GitHub の Migrations API というものを使用しました。ドキュメントは以下のものを参照しました。

基本的にはこの手順通りですが、少し補足しつつ記載します。

詳細手順

Personal Access Token の取得

以下のページより、個人用のアクセストークンを生成します。

Personal Access Tokens

必要な権限は

  • 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 とかにインポートするツールとかもあるのかもしれません。

we are hiring

優秀な技術者と一緒に、好きな場所で働きませんか

株式会社もばらぶでは、優秀で意欲に溢れる方を常に求めています。働く場所は自由、働く時間も柔軟に選択可能です。

現在、以下の職種を募集中です。ご興味のある方は、リンク先をご参照下さい。