こんにちは。不可思議絵の具です。
ローカル管理のGitリポジトリをGitHubに移行する方法を説明します。
自分自身がGit初心者なので後から見返せるよう、忘れそうな事柄を念入りに解説してます。
慣れた人には読みにくくカッタルイかと思いますが、予めご了承ください。
(答えだけ手っ取り早く知りたい方は最終章の「まとめ」をご覧ください)
筆者環境はWindows 10ですが、内容自体はmacOS / Linuxなども同じです。
かつてGitHubのプライベートリポジトリ数に制限があった頃、Windows 10で作ったファイルサーバー上にGitリポジトリを置いていましたが(▶Windows10でのGitリポジトリの作り方)、いつしか無制限になってしまったので、自分でリポジトリを管理する意味がなくなりました。
GitHubならインターネットさえ通じれば何処でも使えるのも魅力です。
そこでリポジトリ置き場を「ローカル」から「GitHub」に移行しようと思い立ったのですが、ログ(更新履歴)がちゃんと移行できるかが心配で足を踏み出せずにいました。
でもちゃんと調べてみると何のことはなく、数コマンド打ち込むだけで簡単に移行できてしまいました(ま、その確信を持つための調査に時間が掛かった訳ですが……)。
ベアリポジトリ(push先)のディレクトリをコマンドプロンプトで開けるか否かで2通りのやり方がありますので、ご自分の状況に合わせて読み進めてください。
手元にベアリポジトリが [ある] 場合
自分に権限があるベアリポジトリがある場合は、
- GitHubに新規リポジトリを作る
(受け皿を作る) - ベアリポジトリのリモートリポジトリにGitHubを追加してpush
(ベアリポジトリに上流(GitHub)を追加してアップロード)
という手順を取ります。
GitHub側で新規リポジトリを作成
事前に全クライアントからcommit & pushし、ベアリポジトリの中身を最終版にします。
次に、GitHubでリポジトリを新規作成します。
- 自分のアカウントのトップページを開き、右上の「+」から『New repository』をクリック
- リポジトリの設定
- 「Repository name」にリポジトリの名前を入力
- 『Public』か『Private』を選択
- 『Create repository』
すると新規リポジトリのページに遷移しますが、実はここに方法がズバリ書いてあります。
「…or push an existing repository from the command line(…または既存のリポジトリをコマンドラインでpush)」にある、3行のコマンドを実行します。
git remote add origin 【リポジトリのURL】
git branch -M main
git push -u origin main
これを実行することでGitHub側のリポジトリが origin となり、ローカルの内容がGitHubにアップロードされます。
次の項は各行の実行方法の説明です。
ベアリポジトリのpush先をGitHubに設定してからpush
- リポジトリのあるフォルダをコマンドラインで開きます。
(Gitを入れてるなら右クリックメニューに「Git Bash Here」が有るのでは?) - 「
git remote add origin 【リポジトリのURL】
」を実行。
(push先にGitHubを追加) - 「
git branch -M main
」を実行。
(ブランチの名前を main に変更) - 「
git push -u origin main
」を実行。
(GitHub (origin main)に push)
以上で全修正履歴込みでGitHubにソースがアップロードされました。
ベアリポジトリを物理削除します。
各行の説明
各コマンドの意味を私なりに調べた所によると・・・。
git remote add origin 【リポジトリのURL】
ローカルリポジトリのpush先にGitHubが追加されます。
git branch -M main
ブランチの名前を main
に変更しているようです。
GitHubではブランチ名を master
から main
へ変更を進めているらしく、素直に乗っておきます。
git push -u origin main
-u
は --set-upstream
と同義で、現在のブランチの上流を origin main
に設定しつつ push
している。
要するにローカルリポジトリをGitHubの下流に置くよう設定しつつ、GitHubにpushする、と。
以降は単に git push
とするだけでもGitHubにアップロードされるようになります。
手元にベアリポジトリが [ない] 場合
自分の手元に全履歴をclone(ダウンロード) ▶ GitHubにpush(アップロード)
- 自分のプロジェクトではない
- ベアリポジトリのディレクトリをコマンドラインで開く権限がない
こういった場合は、
- いったん自分の手元にリポジトリを履歴含め全てclone(コピー)してから
- GitHubにpush(アップロード)する
という手順を取ります。
コマンドの流れとしては、👇です。
git clone --mirror 【コピー元リポジトリ】
cd 【コピー元リポジトリ】.git
git remote set-url --push origin 【GitHubリポジトリ】
git push --mirror
各行の説明
git clone --mirror 【コピー元リポジトリ】
カレントディレクトリに【コピー元リポジトリ】の内容を履歴を含めて持ってきます。
cd 【コピー元リポジトリ】.git
ローカルに作られたリポジトリに移動します。
git remote set-url --push origin 【GitHubリポジトリ】
ローカルリポジトリの push 先をGitHubに変更します。
git push --mirror
GitHubに履歴を含めてpush(コピー)します。
認証失敗でGitHubにアクセスできない場合
GitHubのアカウントを取ってから5億年くらい放置していたこともあり、GitHub画面のID・パスワードが git コマンドで使えなくなったことを知りませんでした。
超ザックリ言うと2021年8月13日以降は「①アクセストークン認証」「②SSH鍵認証」いずれかの方法でアクセスしなさい、という事らしいです。
記録を取っていないもので詳細は書けないのですが、gitコマンドで操作したときに出てくるGitHub認証画面でIDとパスワードを入力しても失敗しました。
(エラーメッセージにて上記公式ブログURLが案内されます)
私は黒い画面で生活していないので、アクセストークンの取得で対応しました。
(バリバリのプログラマーさんならSSH鍵認証の方が「鍵管理の統一」という面で良いでしょうね)
アクセストークンの作り方は👆に書いてあるとおりで、権限は「repo」「admin:repo_hook」にチェックを入れました。
あとは認証画面が出てきたら「パスワード」の代わりに「アクセストークン」を入力するだけです。
どうやら一度認証に成功したら期限いっぱい「ID」「アクセストークン」を入力不要のようです。
便利!
まとめ
内容をまとめますと、
ベアリポジトリにアクセスできる場合は👇
git remote add origin 【リポジトリのURL】
git branch -M main
git push -u origin main
ベアリポジトリにアクセスできない場合は👇
git clone --mirror 【コピー元リポジトリ】
git remote set-url --push origin 【GitHubリポジトリ】
git push --mirror
というやり方でリポジトリを履歴ごとGitHubにコピーできます。
以上です。
では(^O^)/