ローカルのGitリポジトリをGitHubに移行する方法

GitHubWeb

こんにちは。不可思議絵の具です。

ローカル管理のGitリポジトリをGitHubに移行する方法を説明します。

自分自身がGit初心者なので後から見返せるよう、忘れそうな事柄を念入りに解説してます。
慣れた人には読みにくくカッタルイかと思いますが、予めご了承ください。
(答えだけ手っ取り早く知りたい方は最終章の「まとめ」をご覧ください)

筆者環境はWindows 10ですが、内容自体はmacOS / Linuxなども同じです。

 

かつてGitHubのプライベートリポジトリ数に制限があった頃、Windows 10で作ったファイルサーバー上にGitリポジトリを置いていましたが(▶Windows10でのGitリポジトリの作り方)、いつしか無制限になってしまったので、自分でリポジトリを管理する意味がなくなりました。

GitHubならインターネットさえ通じれば何処でも使えるのも魅力です。

そこでリポジトリ置き場を「ローカル」から「GitHub」に移行しようと思い立ったのですが、ログ(更新履歴)がちゃんと移行できるかが心配で足を踏み出せずにいました。

でもちゃんと調べてみると何のことはなく、数コマンド打ち込むだけで簡単に移行できてしまいました(ま、その確信を持つための調査に時間が掛かった訳ですが……)。

ベアリポジトリ(push先)のディレクトリをコマンドプロンプトで開けるか否かで2通りのやり方がありますので、ご自分の状況に合わせて読み進めてください。

スポンサーリンク

手元にベアリポジトリが [ある] 場合

GitHub側で新規リポジトリを作成

事前に全クライアントからcommit & pushし、ベアリポジトリの中身を最終版にします。

次に、GitHubでリポジトリを新規作成します。

  1. 自分のアカウントのトップページを開き、右上の「+」から『New repository』をクリック
    自分のアカウントのトップページを開き、右上の「+」から『New repository』をクリック
  2. リポジトリの設定
    1. 「Repository name」にリポジトリの名前を入力
    2. 『Public』か『Private』を選択
    3. 『Create repository』
      GitHub側リポジトリの設定。「Repository name」にリポジトリの名前を入力。『Public』か『Private』を選択して『Create repository』

すると新規リポジトリのページに遷移しますが、実はここに方法がズバリ書いてあります。

「...or push an existing repository from the command line(…または既存のリポジトリをコマンドラインでpush)」にある、3行のコマンドを実行します

「…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

  1. リポジトリのあるフォルダをコマンドラインで開きます。
    Gitを入れてるなら右クリックメニューに「Git Bash Here」が有るのでは?)
  2. git remote add origin 【リポジトリのURL】」を実行。
    (push先にGitHubを追加)
  3. git branch -M main」を実行。
    (ブランチの名前を main に変更)
  4. git push -u origin main」を実行。
    (GitHub (origin main)に push)

以上で全修正履歴込みでGitHubにソースがアップロードされました。

ベアリポジトリを物理削除します。

各コマンドについて

各コマンドの意味を私なりに調べた所によると・・・。

git remote add 【リポジトリのURL】

ローカルリポジトリのpush先にGitHubが追加されます。

remote add originしたときの動き

 

git branch -M main

ブランチの名前を main に変更しているようです。
GitHubではブランチ名を master から main へ変更を進めているらしく、素直に乗っておきます。

 

git push -u origin main

-u--set-upstream と同義で、現在のブランチの上流を origin main に設定しつつ push している。
(▶push -uの説明

要するにローカルリポジトリをGitHubの下流に置くよう設定しつつ、GitHubにpushする、と。

以降は単に git push とするだけでもGitHubにアップロードされるようになります。

手元にベアリポジトリが [ない] 場合

  • 自分のプロジェクトではない
  • ベアリポジトリのディレクトリをコマンドラインで開く権限がない

こういった場合は、

  1. いったん自分の手元にリポジトリを履歴含め全てclone(コピー)してから
  2. GitHubにpush(アップロード)する

という手順を取ります。

コマンドの流れとしては、👇です。

git clone --mirror 【コピー元リポジトリ】
cd 【コピー元リポジトリ】.git
git remote set-url --push origin 【GitHubリポジトリ】
git push --mirror

各行の説明 

git clone --mirror 【コピー元リポジトリ】

カレントディレクトリに【コピー元リポジトリ】の内容を履歴を含めて持ってきます。
(▶clone –mirrorの説明

 

cd 【コピー元リポジトリ】.git

ローカルに作られたリポジトリに移動します。

 

git remote set-url --push origin 【GitHubリポジトリ】

ローカルリポジトリの push 先をGitHubに変更します。
(▶remote set-url –pushの説明

 

git push --mirror

GitHubに履歴を含めてpush(コピー)します。
(▶push –mirrorの説明

認証失敗でGitHubにアクセスできない場合

GitHubのアカウントを取ってから5億年くらい放置していたこともあり、GitHub画面のID・パスワードが git コマンドで使えなくなったことを知りませんでした。

日本語の解説

GitHub、2021年8月13日以降パスワードでのGit操作を禁止へ
GitHubは12月15日(米国時間)、公式ブログにおいて、2021年8月13日以降、Git操作におけるパスワード認証を廃止し、トークンベースの認証を必須にする方針を発表した。コマンドラインでのGit操作やGitを使用するデスクトップアプリケーションでは、パスワードを用いてリポジトリへアクセスできなくなる。

公式ブログの説明(英語)

Token authentication requirements for Git operations | The GitHub Blog
Beginning August 13th, 2021, we will no longer accept account passwords when authenticating Git operations on GitHub.com.

超ザックリ言うと2021年8月13日以降は「①アクセストークン認証」「②SSH鍵認証」いずれかの方法でアクセスしなさい、という事らしいです。

記録を取っていないもので詳細は書けないのですが、gitコマンドで操作したときに出てくるGitHub認証画面でIDとパスワードを入力しても失敗しました。
(エラーメッセージにて上記公式ブログURLが案内されます)

私は黒い画面で生活していないので、アクセストークンの取得で対応しました。
(バリバリのプログラマーさんならSSH鍵認証の方が「鍵管理の統一」という面で良いでしょうね)

個人アクセストークンを使用する - GitHub Docs
コマンドラインまたは API を使用して、パスワードの代わりに使用する個人アクセストークンを作成する必要があります。

アクセストークンの作り方は👆に書いてあるとおりで、権限は「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^)/

タイトルとURLをコピーしました