リモートリポジトリを自分のリモートリポジトリとして複製する
GitHubにはフォーク(Fork)という機能があり、これをつかうと簡単にリポジトリの複製が可能で元のリポジトリからの変更の取得も可能とかなり便利なのですが以下の特徴があります。
リポジトリの持ち主にフォークをしたことが伝わる
フォークはそのリポジトリへ貢献するという意思表示になる場合がある
公開されているリポジトリを非公開(Private)にすることはできない( フォークの可視性について )
そこでこのページでは上記を無視してリモートリポジトリを複製する方法をまとめます。 最終的な状態のイメージ図を以下に示します。
全体の流れ
複製元リポジトリをベアリポジトリとしてローカルにクローン
空のリポジトリを作成(複製されたリポジトリの場所となる)
ローカルにクローンしたベアリポジトリを1.で作成した空リポジトリにプッシュ
ローカルにノンベアリポジトリをクローン
複製元リポジトリから変更を取得できるようにする
今回はiRIC softwareに同梱されている Nays2DH というソルバーのリポジトリを複製してみます。
1 複製元リポジトリをベアリポジトリとしてローカルにクローン
まずはローカル(=自分のPC)の任意のフォルダに複製元のリポジトリをベアリポジトリとしてクローンします。
ヒント
複製元のリポジトリのURLをコピー
Nays2DH https://github.com/iRICsolvers/v4_Nays2DH
リポジトリのページにアクセスしたら Code からリポジトリのURLを表示して、コピーします。
複製元のリポジトリをクローン
TortoiseGitの画面が出てきたら Bareリポジトリにクローン にチェックをいれ、 URL の欄に先ほどコピーしたURLが入っていることを確認して OK をクリックしてクローンを実行してください。
問題なくクローンできたら以下のように「成功」と表示されます。
先ほどのフォルダの中にリポジトリが作成されています。
中身を見てみるとベアリポジトリなので、普段のノンベアリポジトリでは .git フォルダの中に入っているものが直接入っていることがわかります。
2 GitHubで空のリモートリポジトリを作成
次に先ほどクローンしたリポジトリをプッシュするためのリポジトリをGitHubに新しく作成します。作り方は 新規リモートリポジトリの作成 をご確認下さい。
リポジトリを作成
今回はリポジトリの名前を複製元と同じNays2DHにしました。この名前は任意で入力して問題ありませんが、複製したものだと分かるようにしておくと事故が起きにくいかと思います。
GitHub Actionをオフにする
ヒント
GitHub ActionsとはGitHub上でプログラムのビルドなど様々なことを自動でしてくれる機能です。
先ほどのリポジトリのページ右上にある歯車アイコンの Settings から設定画面を開く
設定画面左側のメニューの からGit Actionの設定項目を表示
Actions Permissions で Disable actions を選択して下部の Sav をクリックして設定を保存
3 ローカルにクローンしたベアリポジトリを空リポジトリにプッシュ
手順1でローカルにクローンした複製元のベアリポジトリを手順2で作成した自分のリポジトリにプッシュします。
まずは手順1でクローンしたリポジトリをエクスプローラーで開き、右クリックメニューの でGit Bashを開きます。
Git Bashが起動したら以下のコマンドを入力し Enter で実行します。
git push --mirror [push先のリモートリポジトリのURL]
git push --mirror git@github.com:starfieldKt/Nays2DH.git
ヒント
Git Bashにコマンドをペーストする方法は以下があります。
マウスホイールを押し込み
Shift + Insert
コマンドを実行して以下のように表示されれば成功です。
手順2で作成したリポジトリのページを開いていましょう。複製元と同じ内容になっていることが確認できるかと思います。
コミットもしっかり複製されています。
4 ローカルにノンベアリポジトリをクローン
手順3まででリポジトリの複製自体は終了です。ですがこのままだと作業が出来ないので複製したリモートリポジトリをローカルにクローンしましょう。 クローンの方法は リモートリポジトリをクローンする を確認してください。
手順1でローカルにクローンした複製元のベアリポジトリはもう使わないので消してしまいましょう。
5 複製元リポジトリから変更を取得できるようにする
リポジトリを複製後に複製元のリポジトリに変更があった時などにコミットを複製元リポジトリから複製後のリポジトリに持ってこれるように設定をします。
ヒント
複製元のリポジトリ(上流のリポジトリ)のリモートの名前は upstream とするのが一般的だそうですが、区別できる名前であればなんでもよいです。
ダイアログが出てきますが、タグの方は いいr 、フェッチの方は はい で大丈夫です。
フェッチをするための画面が出てくるので OK をクリックして実行します。
成功と表示されればOKです。 閉じる で画面を閉じます。
これで複製元のリポジトリのをupstreamという名前で登録することができました。 今後はupstreamを対象に指定してフェッチを実行すれば複製元のリポジトリから変更を取得することが出来ます。
おまけ コマンドラインで行う手順
今回はコマンドラインでの操作が苦手な人向けに極力Gitクライアントを使用しましたが、コマンドラインを使用した方が慣れると早いです。 今回の一連の操作をコマンドラインで行う手順を紹介します。
手順2の新規リモートリポジトリの作成は予め終わらせているものとします。
1 GitBashでリポジトリを作成したいディレクトリを開きます。
git clone --bare [複製元のリポジトリURL]
2 クローンしたリポジトリのディレクトリに移動して複製先リポジトリにプッシュします。
cd [クローンした複製元リポジトリのディレクトリ]
git push --mirror [複製先リポジトリのURL]
3 ひとつ上の階層に戻って複製元のローカルベアリポジトリを消します。
cd ..
rm -rf [クローンした複製元リポジトリのディレクトリ]
4 複製先のリポジトリをクローンします
git clone [複製先リポジトリのURL]
5 複製先のローカルリポジトリのリモートに複製元リポジトリを追加
cd [クローンした複製先のリポジトリのディレクトリ]
git remote add [追加するリモートリポジトリ名] [追加したいリポジトリ]
6 複製元リポジトリからフェッチ
git fetch [複製元リポジトリのリモート名]