GitHubのリポジトリを別の場所に移す場合、リポジトリまるごと移動できるならrepository transfersを利用するのが正解です。

しかし、既存のリポジトリをmonorepoの一部として取り込む場合はそのようなことができません。リポジトリの履歴はLernaなどではlerna importで取り込むことができますが、既に作ったリポジトリからリダイレクトさせることができません。

既存のリポジトリを消してしまうと、既に貼ったリンクなどが404になるためあまり良くありませんし、そのままにしておくと紛らわしいです。

そのため、よく取られるのはリポジトリは空にしてDescriptionなどで移動したことを書いておく手法です。

moved

これをやるmove-github-repositoryというツールを書きました。

move-github-repository

move-github-repositoryは、コマンド一発で次のようなことをします。

  • リポジトリのdescriptionを更新する
  • リポジトリhomepageを移動先のURLに更新する
  • 301_moved_permanentlyブランチを作る
    • このブランチは移転してことを書いたREADME.mdのみがある
  • 301_moved_permanentlyをデフォルトブランチにする
  • リポジトリをアーカイブにします(read onlyとなる)

これによって既存のブランチは維持されるので、リンクなどは切れません。

追記: リポジトリのアーカイブに対応しました。 IssueやPRなどが出せなくなるread onlyモードとなります。

インストール

npmでインストールできます。

npm install -g move-github-repository

GitHubのTokenと更新後に付けたいdescriptionとhomepageを引数に渡して実行できます。

Usage
  $ GH_TOKEN=xxx move-github-repository --description "[[MOVED]]" --homepage http://example.com/new

Options
  --description -d Description repository
  --homepage -h    New URL
  
Env
  GH_TOKEN=xxx move-github-repository --description "[[MOVED]]" --homepage http://example.com/new

Examples
  $ GH_TOKEN=xxx move-github-repository --description "[[MOVED]]" --homepage http://example.com/new

サンプル

textlintをmonorepoに移動させていたので、実際に移動させたリポジトリなどは次のような感じです。