コンテンツにスキップ

1.2.3 リモートリポジトリ

Git ローカル・リモート同期図

このページを終えたら、この evidence card を残します。

リポジトリ状態
操作前後の git status
操作
init、add、commit、branch、merge、remote、pull、またはpushコマンドを使用
履歴
何が変わったかを示す git log またはブランチグラフ
失敗確認
未追跡ファイル、誤ったブランチ、マージ衝突、またはリモート/認証の問題
期待される成果
別の学習者が安全に再実行できる、きれいな Git の trace

この節では、ローカルの Git リポジトリを GitHub に接続します。リモートリポジトリが、バックアップ・共同作業・作品集の公開という3つの役割を同時に担う理由を理解し、push、pull、clone を使ってコードをクラウドに同期する方法を学びます。

  • GitHub でリポジトリを作成する
  • SSH 接続を設定する(もうパスワード入力は不要)
  • git pushgit pullgit clone を身につける
  • よい README.md を書く

なぜリモートリポジトリが必要なの?

Section titled “なぜリモートリポジトリが必要なの?”

ここまで、あなたの Git の記録は自分のパソコンの中にしかありませんでした。もしパソコンのハードディスクが壊れたら、コードも履歴もすべて失われてしまいます。

リモートリポジトリとは、コードのコピーをクラウド(通常は GitHub)に保存しておくことです。これには3つの大きなメリットがあります。

  1. バックアップ——パソコンが壊れても大丈夫。コードはクラウドにある
  2. 共同作業——複数人で同じリポジトリにコードを送れる
  3. 公開——あなたの GitHub はコード作品集になる。就職面接でも見られる

  1. github.com を開く
  2. Sign up をクリックして、メールアドレスで登録する
  3. ユーザー名は英語で、短くて覚えやすいものがおすすめ(たとえば zhangsan-dev)。これはプロジェクトのリンクに表示されます

GitHub にコードを push するたびに本人確認が必要です。SSH はいちばん便利な方法で、一度設定すれば、以後パスワードを入力する必要がありません。

Terminal window
ssh-keygen -t ed25519 -C "あなたのメール@example.com"

いくつか質問されますが、すべて Enter を押せばOKです(デフォルト値を使います)。

Enter file in which to save the key (/Users/あなたのユーザー名/.ssh/id_ed25519): [Enter]
Enter passphrase (empty for no passphrase): [Enter]
Enter same passphrase again: [Enter]

2つ目の手順:公開鍵をコピーする

Section titled “2つ目の手順:公開鍵をコピーする”
Terminal window
# macOS
cat ~/.ssh/id_ed25519.pub | pbcopy
# Linux
cat ~/.ssh/id_ed25519.pub
# その後、出力された内容を手動でコピーする
# Windows PowerShell
Get-Content ~/.ssh/id_ed25519.pub | Set-Clipboard

出力は次のようになります(これは公開鍵なので、安全に共有できます)。

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... あなたのメール@example.com
  1. github.com/settings/keys を開く
  2. New SSH key をクリックする
  3. Title に “My Laptop” と入力する(または何でもOK。どのPCか分かる名前にする)
  4. Key 欄に、先ほどコピーした公開鍵を貼り付ける
  5. Add SSH key をクリックする
Terminal window

次のように表示されれば成功です。

Hi zhangsan! You've successfully authenticated, but GitHub does not provide shell access.

これで設定完了です!


リモートリポジトリを作成して push する

Section titled “リモートリポジトリを作成して push する”

例:以前作った AI プロジェクトを GitHub に push する

Section titled “例:以前作った AI プロジェクトを GitHub に push する”

方法1:先に GitHub でリポジトリを作成してから、ローカルプロジェクトとつなぐ

Section titled “方法1:先に GitHub でリポジトリを作成してから、ローカルプロジェクトとつなぐ”

1つ目の手順:GitHub でリポジトリを作成する

  1. github.com/new を開く
  2. Repository name に ai-image-classifier と入力する
  3. Description に “CNN を使ったシンプルな画像分類プロジェクト” と入力する
  4. Public を選ぶ(公開して、他の人にも作品を見てもらう)
  5. “Add a README file” は チェックしない(ローカルにすでにあるため)
  6. Create repository をクリックする

2つ目の手順:ローカルリポジトリを GitHub に接続する

GitHub にはコマンドが表示されますが、必要なのは “push an existing repository” の部分です。

Terminal window
cd ai-image-classifier
# リモートリポジトリを関連付ける(zhangsan はあなたの GitHub ユーザー名に置き換える)
git remote add origin [email protected]:zhangsan/ai-image-classifier.git
# ローカルコードを GitHub に push する
git push -u origin main

git remote add origin の意味は、リモートリポジトリに origin という名前を付けることです(これは慣例的な名前です)。URL はその後ろのものです。

-u origin main の意味は、ローカルの main ブランチとリモートの main ブランチを関連付けることです。以後は git push だけでよく、毎回長いコマンドを書く必要はありません。

3つ目の手順:確認する

GitHub のページを更新すると、コード、コミット履歴、README が表示されているはずです。

方法2:空のリポジトリを clone してから、ファイルを追加する

Section titled “方法2:空のリポジトリを clone してから、ファイルを追加する”

まだローカルコードがない場合は、逆の順番で進めてもかまいません。

Terminal window
# GitHub から空のリポジトリ(または他人のプロジェクト)を clone する
git clone [email protected]:zhangsan/my-new-project.git
cd my-new-project
# その中でコードを書く...
echo "print('hello')" > main.py
# commit して push する
git add .
git commit -m "メインプログラムを追加"
git push

リモートリポジトリをつないだら、日常の操作はとても簡単です。

git push:ローカルの新しい commit をリモートへ送る

Section titled “git push:ローカルの新しい commit をリモートへ送る”
Terminal window
# 新しいコードを書いた
echo "新機能" >> src/utils.py
git add .
git commit -m "データ前処理関数を追加"
# GitHub に push する
git push

git pull:リモートの更新をローカルに取り込む

Section titled “git pull:リモートの更新をローカルに取り込む”
Terminal window
# たとえば、別のPC上で(または同僚が)コードを修正して GitHub に push したとする
# 最新のコードを取り込む必要がある
git pull
Terminal window
# 毎日の作業を始める前:まず最新コードを取り込む
git pull
# コードを書く、修正する...
# 1つの機能が終わったら:commit して push
git add .
git commit -m "データ拡張モジュールを完成"
git push
# さらにコードを書く...
# また1つの機能が終わった
git add .
git commit -m "学習ログ記録機能を追加"
git push

git clone:他人のプロジェクトをダウンロードする

Section titled “git clone:他人のプロジェクトをダウンロードする”

Git で最初に使うことが多い操作かもしれません。GitHub からオープンソースプロジェクトをダウンロードすることです。

Terminal window
# AI 関連のオープンソースプロジェクトを clone する
git clone [email protected]:ultralytics/yolov5.git
cd yolov5
ls

git clone は次の3つを行います。

  1. プロジェクトと同じ名前のフォルダを作成する
  2. すべてのコードと完全な履歴をダウンロードする
  3. リモートリポジトリの関連付けを自動で設定する
Terminal window
# このプロジェクトの commit 履歴を見る
git log --oneline -10 # 直近10件を見る
# どんなブランチがあるか確認する
git branch -a
# リモートリポジトリのアドレスを確認する
git remote -v

GitHub の各プロジェクトのトップページには、自動で README.md の内容が表示されます。よい README は、あなたの作品集の顔になります。

AI プロジェクト向け README テンプレート

Section titled “AI プロジェクト向け README テンプレート”
# プロジェクト名
このプロジェクトが何をするかを1文で紹介する。
## 📋 プロジェクト概要
プロジェクトの背景、解決したい問題、使っている方法を2〜3文で詳しく説明する。
## ✨ 主な特徴
- 特徴1:ベースライン画像分類モデルを学習する
- 特徴2:指標と予測例を保存する
- 特徴3:実験を再実行する手順を記録する
## 🛠️ 技術スタック
- Python 3.11
- PyTorch 2.0
- その他使っているライブラリ
## 🚀 クイックスタート
### 環境構築
​```bash
git clone [email protected]:yourname/project.git
cd project
pip install -r requirements.txt
​```
### 実行
​```bash
python src/train.py
​```
## 📊 実験結果
| モデル | 精度 | 学習時間 |
|------|:-----:|:------:|
| SimpleCNN | 85.2% | 10 min |
| ResNet18 | 92.7% | 30 min |
## 📁 プロジェクト構成
​```
project/
├── data/ # データファイル
├── models/ # 学習済みモデル
├── src/
│ ├── model.py # モデル定義
│ ├── train.py # 学習スクリプト
│ └── utils.py # ユーティリティ関数
├── requirements.txt
└── README.md
​```
## 📄 License
MIT

例:私たちのプロジェクトの README を更新する

Section titled “例:私たちのプロジェクトの README を更新する”
Terminal window
# 上のテンプレートを使って README を書く(内容は簡易版)
cat > README.md << 'READMEEOF'
# AI 画像分類器
CNN を使って CIFAR-10 データセットを画像分類する入門プロジェクトです。
## 技術スタック
- Python 3.11
- PyTorch 2.0
## クイックスタート
```bash
git clone [email protected]:zhangsan/ai-image-classifier.git
cd ai-image-classifier
pip install -r requirements.txt
python src/train.py
ai-image-classifier/
├── data/ # データファイル(gitignore 対象)
├── models/ # モデルの重み(gitignore 対象)
├── src/
│ ├── model.py # CNN モデル定義
│ ├── train.py # 学習スクリプト
│ └── utils.py # ユーティリティ関数
├── .gitignore
├── requirements.txt
└── README.md

READMEEOF

git add README.md git commit -m “README を充実:プロジェクト説明と使い方を追加” git push

---
<details>
<summary>レビュー観点と通過基準</summary>
このページの合格基準は、local repository と remote repository の関係を他の人が確認できることです。
最小証拠は次の通りです。
1. `git remote -v` が、`origin` と意図した repository を示している。
2. push 後の `git status` が clean である。
3. `git log --oneline -3` に、直近の README または code commit が見える。
4. GitHub 側で同じ commit と README を確認できる。
5. rejected が出たとき、`git pull` の前に remote 側との差分を説明できる。
`git push -u origin main` は最初の upstream 設定だけで使います。その後の日常フローは `pull -> edit -> add -> commit -> push` です。
</details>
## よくある問題
### push が拒否される(rejected)

! [rejected] main -> main (fetch first)

これは、リモートリポジトリにローカルにない commit があることを意味します(別のPCで変更した、または同僚が新しいコードを push した、など)。解決方法は次のとおりです。
```bash
git pull # 先にリモートの更新を取得する
git push # そのあとで push する

日本国内や中国国内では、GitHub プロジェクトの clone が遅いことがあります。対処法はいくつかあります。

Terminal window
# 方法1:最新バージョンだけを clone する(完全な履歴は取らない)。かなり速くなる
git clone --depth 1 [email protected]:yourname/ai-image-classifier.git
# 方法2:ミラーを使って高速化する
# github.com をミラーサイトに置き換える(具体的なミラーURLは、最新の利用可能なものを検索してください)

間違ったリポジトリに push してしまった

Section titled “間違ったリポジトリに push してしまった”
Terminal window
# 現在関連付けられているリモートリポジトリを確認する
git remote -v
# リモートリポジトリのURLを変更する
git remote set-url origin [email protected]:正しいユーザー名/正しいリポジトリ名.git

コマンド用途いつ使うか
git remote add origin URLリモートリポジトリを関連付ける新しいプロジェクトを初めて push する前
git pushローカルの commit をリモートに送る機能が完成したあと
git pullリモートの更新をローカルに取り込む作業を始める前
git clone URLリモートリポジトリをローカルにダウンロードするプロジェクトを初めて取得するとき

日常の流れ:pull → コードを書く → add → commit → push。とてもシンプルです。