yasutomogのブログ

Software Engineerの雑記

GitHubのリポジトリ(Issue)移行

移行方法

  • 移行元と移行先のリポジトリ管理者が同一の場合、GitHubのセッティングページからボタン1つで移行が可能。
  • 上記条件を満たさない場合は、自分で何かしらの移行スクリプトを書いてあげる必要がある。

移行プログラム

処理概要

  • GitHub APIを使用して移行元からIssue周りのデータをGetし、移行先のリポジトリへPostしていく流れ
  • Issueに必要なマイルストーンやラベルは最初にまとめて移行する
  • Issueは1件ずつPostして、それに紐づくコメントもその都度取得してPostする
  • Issueもある程度の件数になると、GitHubAPIが途中でエラーになることがあるため、簡易的なリトライ処理を実装
    • リトライ処理時は、前回とまったIssue番号を設定して、処理フローを切り替えて再実行とする(簡易的なので、コメントアウトを切り替えて対応)

github.com

プログラムの仕様

移行スクリプトを書いていく中ですべて完全に移行するのは難しく、割り切りが必要になった。

  • IssueのLabelとMilestoneはすべて移行する
  • Issueの移行は、移行元と移行先で同一のIssue番号を付与する
    • Postした順にIssue番号が採番されるため、移行元からIssueデータをソートして取得
  • Pull Requestは簡易的な移行とする
    • GitHubのIssueとPull Requestは1種類のidで管理されており、移行元と移行先のIssue番号をあわせるため、移行元でPull Requestだったものは、タイトルにその旨記載して空のIssueとして登録
  • Issueのコメントで使用している画像添付については、移行を諦める