😎

gitHubのリポジトリのミラーコピーの話

に公開

あくまでgitHubの話

この記事に書かれているのは、あくまで、GitHubの話です。

GitLabとか、GitBucketとか、Azure DevOpsなどの
他のgitのリモートのサイトは、どうなのか知りません

自分のgitHubのリポジトリを丸ごと、コピペしたいときがある。

環境構築など終わった状況でpushしたリポジトリは、そのまま置いといて
リポジトリ自体を丸ごと、コピーして

コピーしたリポジトリをgit cloneしてnpm installだけやって、
続き何かしたい時とか。

途中まである程度、汎用的な設定や、共通項目の実装だけ終わらせた元のリポジトリ
をコピペして、
npm installだけして、追加実装をしてく
みたいなことを、大元の1つのリポジトリをベースに展開して、
作業を省略したいことがあった

gitにはリポジトリをフォークするという概念があるらしいが、
フォーク元と、フォーク先が、同じgitHubのアカウント内リポジトリとなる場合は、
フォークはできない仕様ならしい。

そのため、フォークはあきらめましたが、
ミラーコピーであれば、同じgitHubのアカウント内リポジトリであっても可能とのことでした。

そこで、このミラーコピーを使うことにしたのである

★★★★★★★★★★★★★★★★★★★★★★★★
過去に開発したプロダクトを丸ごとコピーして、
新しいプロダクトのための差分開発して仕上げる
ときなどでも、使えるのではないかと思っている
★★★★★★★★★★★★★★★★★★★★★★★★

具体的なやり方

WSL2(Ubuntu)のターミナルで作業している前提で書いてるが
別に、おそらく、Git Bashのターミナルでも同様のことはできるのではないかと思う。

/tmpなどの配下に一時的に捨てフォルダを作る

Linux環境だと/tmpは、1日だけで勝手に消される領域

/tmp/work001
とか適当なフォルダ作って、その中にcdコマンドで入った状況だとする

https://github.com/myUser/fromKankyo.git
をコピー元のリポジトリで、
https://github.com/myUser/toKankyo.git
がコピー先のリポジトリだとする

そしたら、

git clone --bare https://github.com/myUser/fromKankyo.git
cd fromKankyo.git

「--bare」を付けて「git clone」するのがポイント
そうすると、なぜか、「.git」までフォルダ名についたフォルダができる
(  「--bare」を付けない「git clone」だとフォルダ名に「.git」はつかないのであるが )

webブラウザでgitHubのサイトを表示して作業します。

GitHubにログイン
https://github.com
にログインします。

右上の「+」メニューをクリック →「New repository」を選択

リポジトリ情報を入力

Owner: は自分を選択

Repository name: toKankyo と入力 ( 今回の例では「toKankyo」だが、コピー先のリポジトリ名 )

Visibility: 「Private」か「Public」を選択 ( 用途に合わせて好きな方 )

Initialize this repository with:
README、.gitignore、License すべて未チェック(空の状態にする)

「Create repository」ボタンをクリック

上記をやって、空の状態の

https://github.com/myUser/toKankyo.git

のコピー先のリポジトリを作成する

上記で、空のコピー先のリポジトリができている前提で

先ほどの
/tmp/work001
にいるターミナルで続きのコマンドを実行する

git push --mirror https://github.com/myUser/toKankyo.git

「--mirror」をつけるのがポイントです。

ここまでできたら、
この
/tmp/work001
のwork001は、もう、要らないからフォルダごと削除でよい

Linuxの場合は、/tmpの配下は放置してたら、勝手に消えますので、そのまま放置でよい。

Webブラウザで、

https://github.com/myUser/toKankyo.git

のURLでコピー先のリポジトリににアクセスすると、
中身がコピーされている
ただし、過去のプルリクの内容は、コピーされていない
ブランチなどはコピーされている

defaultのブランチがmain以外になってしまってることがあるため、
その場合は、

リポジトリ → Settings → 画面内の “Default branch” セクション → Edit → main を選択 → Update

(  管理者権限が必要 )

にて、defaultのブランチをmainに更新する。

そこまでやったら、
自分が普段、開発作業をしているお好きなフォルダで、

git clone https://github.com/myUser/toKankyo.git

すれば、toKankyoフォルダができるでしょうから
cd toKankyo
で、中に入って、npm install などだけしとけば、
元の分からの続きできますので、
コピー先の

https://github.com/myUser/toKankyo.git

にpushや、プルリクを作成したり、いつも通りやればよろしいです
( そして、そうしても、コピー元のリポジトリは影響しません )

以上

Discussion