Git/GitHub

リモートと GitHub

9

リモートと GitHub — Git Tips

リモート は、ローカルと履歴をやり取りする別の置き場です。GitHub に空リポジトリを作り、remote addclone でつなぐ手順と、SSH / HTTPS の違いです。

参考: git-remote · git-clone · Working with Remotes · Creating a repository · SSH


目次

  1. リモートとは何か
  2. GitHub 上に空リポジトリを作る(概念的な手順)
  3. 既存のローカルリポジトリを紐づける(remote add)
  4. 最初から clone する場合
  5. remote -v で確認する
  6. SSH と HTTPS の違い(概要)
  7. origin という名前の意味
  8. よくある失敗

リモートとは何か

これまでの git initcommit は、すべて ローカル(自分の PC) の中だけで完結する操作でした。リモートは、そのローカルリポジトリと 同じ履歴を共有する、別の場所にあるリポジトリ を指します。多くの場合、リモートは GitHub のようなホスティングサービス上に置かれます。

ローカルリポジトリ(自分のPC)  <---->  リモートリポジトリ(GitHub 上)        git push  ─────────────────>        git pull  <─────────────────

リモートは「クラウド上のバックアップ」というだけでなく、他の人(や他の PC)と履歴をやり取りするための接続先です。1 つのローカルリポジトリに複数のリモートを登録することもできますが、個人学習の範囲では基本的に origin という 1 つのリモートだけを扱えば十分です。


GitHub 上に空リポジトリを作る(概念的な手順)

GitHub のアカウントを持っていることを前提に、空のリポジトリを作る流れは次のとおりです(画面は変わることがあるため、要点だけ)。

  1. GitHub にログインし、右上の + から New repository を選ぶ
  2. Repository name(例: git-practice)を入力する
  3. Public / Private を選ぶ(学習用なら Private でも問題ない)
  4. README, .gitignore, license を追加するかどうかを選ぶ
    • ローカルに既存のリポジトリを push したい場合は、何も追加せず「空」のまま作るのが安全(後述)
  5. Create repository を押す

作成が完了すると、次のような URL 形式のリポジトリページが表示されます。

https://github.com/<ユーザー名>/<リポジトリ名>

GitHub 側では、この空リポジトリのページに Quick setup として git remote addgit clone のコマンド例が表示されます。この記事の以降の手順は、その表示内容と実質的に同じです。

README を追加すると何が変わるか: GitHub 側で README を追加すると、リモートに 1 つコミットが作られた状態になります。ローカルに履歴があるリポジトリをそこへ push すると、後述する「非 fast-forward」で拒否されることがあるため、既存のローカルリポジトリを紐づける場合は空のまま作成するのがシンプルです。


既存のローカルリポジトリを紐づける(remote add)

すでに git init して commit 済みのローカルリポジトリがある場合、git remote add でリモートを登録します。

cd my-projectgit remote add origin https://github.com/<ユーザー>/<リポジトリ>.git

origin はリモートに付ける 名前(エイリアス) で、慣習的にメインのリモートは origin と呼びます。登録後、初回だけブランチ名を指定して push します。

git branch -M maingit push -u origin main

-u--set-upstream)は、ローカルの main ブランチと origin/main追跡関係(upstream) として結びつける指定です。一度 -u を付けて push しておくと、次回以降は git push / git pull だけでどのリモート・どのブランチとやり取りするかを Git が覚えてくれます。


最初から clone する場合

GitHub 側に既にリポジトリがある場合(自分が作った空リポジトリ、または他の人・チームのリポジトリ)は、remote add の代わりに git clone を使うのが一般的です。

git clone https://github.com/<ユーザー>/<リポジトリ>.gitcd <リポジトリ>

clone は次を 1 コマンドでまとめて 行います。

clone が内部的にやること 個別コマンドで言えば
空のローディレクトリを作る mkdir + cd
リモートの履歴を丸ごと取得する git init + git remote add origin ... + git fetch
リモートの origin を自動登録する git remote add origin ...
デフォルトブランチをチェックアウトする git switch <default-branch>

clone した直後から、そのリポジトリの origin は自動的に登録済みで、追跡関係も設定された状態になります。個人の学習用リポジトリを これから作る のか、すでにある のかで、remote addclone のどちらを使うかが決まります。

これから作る(ローカルが先)    → git init → remote add → pushすでにある(GitHub / 他人が先) → git clone

remote -v で確認する

現在登録されているリモートを確認するには git remote -v を使います。

git remote -v
origin  https://github.com/<ユーザー名>/<リポジトリ名>.git (fetch)origin  https://github.com/<ユーザー名>/<リポジトリ名>.git (push)

fetch 用と push 用が別々に表示されるのは、理論上それぞれ別の URL を設定できるためです(通常は同じ URL)。リモートの詳細情報(追跡ブランチなど)を見たい場合は次を使います。

git remote show origin

登録済みのリモート名の一覧だけを見たい場合は、-v を付けずに実行します。

git remote
origin

複数のリモートを扱う場合(例: 自分の fork と元のリポジトリの両方)は、origin 以外の名前(例: upstream)で追加していくことになりますが、個人学習の範囲では origin だけで問題ありません。


SSH と HTTPS の違い(概要)

リモート URL には HTTPSSSH の 2 種類があります。

項目 HTTPS SSH
URL の例 https://github.com/user/repo.git git@github.com:user/repo.git
認証方法 Personal Access Token(PAT)などのトークン SSH 鍵ペア(公開鍵を GitHub に登録)
初回セットアップ GitHub 上でトークンを発行するだけで開始しやすい 鍵の生成・ssh-agent への登録などがやや手間
日常操作 認証情報のキャッシュ設定次第で毎回聞かれることがある 一度鍵を設定すれば基本的に聞かれない
社内ネットワーク プロキシ配下でも通りやすいことが多い ポート 22 が塞がれている環境では通らないことがある

どちらも最終的にできることは同じで、認証の方式が違うだけです。個人学習では最初は HTTPS + PAT で始め、慣れてきたら SSH 鍵に切り替える、という進め方でも問題ありません。

リモート URL の種類は、URL の先頭を見れば判別できます。

https://github.com/...   → HTTPSgit@github.com:...       → SSH

すでに登録したリモートの方式を切り替えたい場合は、remote add し直すのではなく set-url を使います。

git remote set-url origin git@github.com:<ユーザー>/<リポジトリ>.git

PAT の発行や SSH 鍵の生成(ssh-keygen)の具体手順は、認証手順のトピックまたはリポジトリの setup フォルダを参照してください。 ここはリモート URL の形と概要の差に留めます。


origin という名前の意味

origin はただの慣習的な名前であり、Git が特別扱いしているわけではありません。clone したときに Git が自動でその名前を付けるため、多くのプロジェクトで origin が「メインのリモート」を指す名前として定着しています。

# origin という名前を別名に変えても動作は変わらない(非推奨だが可能)git remote rename origin main-remote

学習中は名前を変える必要はありませんが、「origin は特別なキーワードではなく単なるラベルである」と知っておくと、複数リモートを扱うときに混乱しにくくなります。


よくある失敗

remote origin already exists

fatal: remote origin already exists.

すでに origin という名前のリモートが登録されている状態で、もう一度 remote add origin を実行するとこのエラーになります。URL を変更したいだけなら add ではなく set-url を使います。

git remote set-url origin https://github.com/<ユーザー>/<新しいリポジトリ>.git

repository not found

remote: Repository not found.fatal: repository '...' not found

URL のタイプミス、リポジトリ名の間違い、または Private リポジトリへのアクセス権限がないことが原因です。ブラウザで同じ URL を開いて存在を確認し、権限がある GitHub アカウントで認証されているかも確認します。

clone したのにファイルが見当たらない

git clone https://github.com/<ユーザー>/<リポジトリ>.gitls

clone はカレントディレクトリの さらに下 にリポジトリ名のフォルダを新しく作ります。cd <リポジトリ名> を忘れて、そのままファイルを探していないか確認してください。

HTTPS でパスワードを聞かれるがログインできない

GitHub は 2021 年以降、HTTPS 経由の Git 操作でアカウントパスワードを受け付けていません。パスワードの代わりに Personal Access Token(PAT) を入力する必要があります。詳しい発行手順は認証系のセットアップ資料を参照してください。

git remote -v で古い URL が表示される

リポジトリを作り直した、URL を変更したのに反映されていない場合は、set-url で明示的に更新します。

git remote set-url origin <新しいURL>git remote -v

シェア