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

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

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

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

moved

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

move-github-repository

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

  • リポジトリのdescription && homepageを更新する
  • 301_moved_permanentlyブランチを作る
    • このブランチは移転してことを書いたREADME.mdのみがある
  • 301_moved_permanentlyをデフォルトブランチにする

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

インストール

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に移動させていたので、実際に移動させたリポジトリなどは次のような感じです。