自分のプライベートリポジトリを Fork できない? – GitHubで「疑似 Fork」を作る最も確実な方法

みなさん、こんにちは。

GitHub を使っていて「あれ?」と思ったことはありませんか? そう、自分が所有しているプライベートリポジトリを、自分のアカウント内に Fork することはできないのです。

これは GitHub の仕様で、2026 年現在も変わっていません。「自分のものは自分のもの、わざわざ分身を作る必要はないでしょ?」という設計思想なのかもしれませんが、実際の開発現場では困るケースが多々ありますよね。

  • 元のリポジトリは「正解」として残し、別ラインで大胆な改造をしたい
  • 実験用に環境を完全に切り離したコピーを作りたい
  • 過去の履歴やタグをすべて保持したまま、新しいリポジトリとして再出発したい

「Fork ボタンが押せないなら詰みか……」と諦める必要はありません。Git の仕組みを正しく使えば、コマンド数行で「完全な複製(疑似 Fork)」は簡単に作れます。

今回は、GitHub の UI に頼らず、Git の標準機能をフル活用してリポジトリを丸ごとコピーする方法を解説します。

 


 

全体の流れ(3 ステップ)

 

やることは非常に簡単。以下の 3 ステップです。

  1. 元リポジトリを --mirror でクローンする
  2. GitHub で新しい空のプライベートリポジトリを作る
  3. クローンした中身を新リポジトリへ --mirror でプッシュする

実はこの手法、以前ご紹介したリポジトリをインポートする方法と同じ原理です。

外部サーバーから持ってくるのも、GitHub 内部で複製するのも、Git のレイヤーで見れば同じ「リポジトリの移行」なんですね。

 


 

元リポジトリを mirror clone する

 

まず、コピー元のプライベートリポジトリをクローンします。ここで重要なのが --mirror オプションです。

git clone --mirror https://github.com/username/original-private-repo.git

 

なぜ --bare ではなく --mirror なのか?

Git に詳しい方なら「--bare(作業ディレクトリを持たないクローン)でいいのでは?」と思うかもしれません。しかし、疑似 Fork においては --mirror が正解です。

  • --bare
    .git ディレクトリの中身だけをコピーします。
  • --mirror
    全ブランチ、全タグに加え、refs/ 以下のすべての情報(リモート追跡ブランチなど)をそのままの形でコピーし、プッシュ先でもそれを維持しようとします。

つまり、「リポジトリの完全な鏡(ミラー)」を作るための専用オプションなのです。これにより、コミットハッシュひとつ変えずに移行が可能になります。

 


 

GitHub で新しいプライベートリポジトリを作成

 

次に、GitHub の Web 画面から受け皿となるリポジトリを作ります。

  • リポジトリ名
    任意(例:new-private-repo
  • 公開設定
    Private
  • 注意点
    README や .gitignore は作成しない(完全に空の状態にする)

作成後、新しいリポジトリの URL(https://github.com/username/new-private-repo.git)を控えておきましょう。

 


 

push 先を変更して mirror push する

 

いよいよ仕上げです。先ほどクローンしたディレクトリ(.git で終わる名前になっています)に移動し、プッシュ先を新リポジトリに書き換えます。

cd original-private-repo.git

# プッシュ先を新しいリポジトリにセット
git remote set-url origin https://github.com/username/new-private-repo.git

# すべての情報を一気に流し込む!
git push --mirror

これで完了です!新リポジトリを確認してみてください。ブランチもタグも、そして何よりこれまでの苦労が詰まったコミット履歴も、すべてが完璧に再現されているはずです。

 


 

Fork できなくても道はある

 

GitHub の「自分のリポジトリは Fork できない」という制限は、一見不便に思えますが、今回のような Git 本来の機能を使えばより柔軟に対応できます。

  • 履歴がすべて残る(誰がいつ何をしたか失われない)
  • タグやリリース情報も保持される
  • GitHub の UI に依存しないので、他の Git サービスへの移行にも応用できる

実験的な開発をしたいときや、プロジェクトをブランチ管理ではなく「リポジトリ単位」で切り出したいときは、ぜひこの --mirror 戦略を使ってみてください。

 

本日も最後までお読みいただきありがとうございました。

それでは、よい開発ライフを!

カテゴリ: 開発インフラ

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール