1.2.3 リモートリポジトリ

このページを終えたら、この evidence card を残します。
- リポジトリ状態
- 操作前後の git status
- 操作
- init、add、commit、branch、merge、remote、pull、またはpushコマンドを使用
- 履歴
- 何が変わったかを示す git log またはブランチグラフ
- 失敗確認
- 未追跡ファイル、誤ったブランチ、マージ衝突、またはリモート/認証の問題
- 期待される成果
- 別の学習者が安全に再実行できる、きれいな Git の trace
この節の位置づけ
Section titled “この節の位置づけ”この節では、ローカルの Git リポジトリを GitHub に接続します。リモートリポジトリが、バックアップ・共同作業・作品集の公開という3つの役割を同時に担う理由を理解し、push、pull、clone を使ってコードをクラウドに同期する方法を学びます。
- GitHub でリポジトリを作成する
- SSH 接続を設定する(もうパスワード入力は不要)
git push、git pull、git cloneを身につける- よい README.md を書く
なぜリモートリポジトリが必要なの?
Section titled “なぜリモートリポジトリが必要なの?”ここまで、あなたの Git の記録は自分のパソコンの中にしかありませんでした。もしパソコンのハードディスクが壊れたら、コードも履歴もすべて失われてしまいます。
リモートリポジトリとは、コードのコピーをクラウド(通常は GitHub)に保存しておくことです。これには3つの大きなメリットがあります。
- バックアップ——パソコンが壊れても大丈夫。コードはクラウドにある
- 共同作業——複数人で同じリポジトリにコードを送れる
- 公開——あなたの GitHub はコード作品集になる。就職面接でも見られる
GitHub に登録する
Section titled “GitHub に登録する”- github.com を開く
- Sign up をクリックして、メールアドレスで登録する
- ユーザー名は英語で、短くて覚えやすいものがおすすめ(たとえば
zhangsan-dev)。これはプロジェクトのリンクに表示されます
SSH 接続を設定する
Section titled “SSH 接続を設定する”GitHub にコードを push するたびに本人確認が必要です。SSH はいちばん便利な方法で、一度設定すれば、以後パスワードを入力する必要がありません。
1つ目の手順:SSH 鍵を作成する
Section titled “1つ目の手順:SSH 鍵を作成する”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つ目の手順:公開鍵をコピーする”# macOScat ~/.ssh/id_ed25519.pub | pbcopy
# Linuxcat ~/.ssh/id_ed25519.pub# その後、出力された内容を手動でコピーする
# Windows PowerShellGet-Content ~/.ssh/id_ed25519.pub | Set-Clipboard出力は次のようになります(これは公開鍵なので、安全に共有できます)。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... あなたのメール@example.com3つ目の手順:GitHub に追加する
Section titled “3つ目の手順:GitHub に追加する”- github.com/settings/keys を開く
- New SSH key をクリックする
- Title に “My Laptop” と入力する(または何でもOK。どのPCか分かる名前にする)
- Key 欄に、先ほどコピーした公開鍵を貼り付ける
- Add SSH key をクリックする
4つ目の手順:接続を確認する
Section titled “4つ目の手順:接続を確認する”次のように表示されれば成功です。
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 でリポジトリを作成する
- github.com/new を開く
- Repository name に
ai-image-classifierと入力する - Description に “CNN を使ったシンプルな画像分類プロジェクト” と入力する
- Public を選ぶ(公開して、他の人にも作品を見てもらう)
- “Add a README file” は チェックしない(ローカルにすでにあるため)
- Create repository をクリックする
2つ目の手順:ローカルリポジトリを GitHub に接続する
GitHub にはコマンドが表示されますが、必要なのは “push an existing repository” の部分です。
cd ai-image-classifier
# リモートリポジトリを関連付ける(zhangsan はあなたの GitHub ユーザー名に置き換える)
# ローカルコードを GitHub に push するgit push -u origin maingit remote add origin の意味は、リモートリポジトリに origin という名前を付けることです(これは慣例的な名前です)。URL はその後ろのものです。
-u origin main の意味は、ローカルの main ブランチとリモートの main ブランチを関連付けることです。以後は git push だけでよく、毎回長いコマンドを書く必要はありません。
3つ目の手順:確認する
GitHub のページを更新すると、コード、コミット履歴、README が表示されているはずです。
方法2:空のリポジトリを clone してから、ファイルを追加する
Section titled “方法2:空のリポジトリを clone してから、ファイルを追加する”まだローカルコードがない場合は、逆の順番で進めてもかまいません。
# GitHub から空のリポジトリ(または他人のプロジェクト)を clone するcd my-new-project
# その中でコードを書く...echo "print('hello')" > main.py
# commit して push するgit add .git commit -m "メインプログラムを追加"git push日常的な push と pull
Section titled “日常的な push と pull”リモートリポジトリをつないだら、日常の操作はとても簡単です。
git push:ローカルの新しい commit をリモートへ送る
Section titled “git push:ローカルの新しい commit をリモートへ送る”# 新しいコードを書いたecho "新機能" >> src/utils.pygit add .git commit -m "データ前処理関数を追加"
# GitHub に push するgit pushgit pull:リモートの更新をローカルに取り込む
Section titled “git pull:リモートの更新をローカルに取り込む”# たとえば、別のPC上で(または同僚が)コードを修正して GitHub に push したとする# 最新のコードを取り込む必要があるgit pull実際の仕事での流れ
Section titled “実際の仕事での流れ”# 毎日の作業を始める前:まず最新コードを取り込むgit pull
# コードを書く、修正する...
# 1つの機能が終わったら:commit して pushgit add .git commit -m "データ拡張モジュールを完成"git push
# さらにコードを書く...
# また1つの機能が終わったgit add .git commit -m "学習ログ記録機能を追加"git pushgit clone:他人のプロジェクトをダウンロードする
Section titled “git clone:他人のプロジェクトをダウンロードする”Git で最初に使うことが多い操作かもしれません。GitHub からオープンソースプロジェクトをダウンロードすることです。
# AI 関連のオープンソースプロジェクトを clone するcd yolov5lsgit clone は次の3つを行います。
- プロジェクトと同じ名前のフォルダを作成する
- すべてのコードと完全な履歴をダウンロードする
- リモートリポジトリの関連付けを自動で設定する
clone した後によく使う操作
Section titled “clone した後によく使う操作”# このプロジェクトの commit 履歴を見るgit log --oneline -10 # 直近10件を見る
# どんなブランチがあるか確認するgit branch -a
# リモートリポジトリのアドレスを確認するgit remote -vREADME.md をしっかり書く
Section titled “README.md をしっかり書く”GitHub の各プロジェクトのトップページには、自動で README.md の内容が表示されます。よい README は、あなたの作品集の顔になります。
AI プロジェクト向け README テンプレート
Section titled “AI プロジェクト向け README テンプレート”# プロジェクト名
このプロジェクトが何をするかを1文で紹介する。
## 📋 プロジェクト概要
プロジェクトの背景、解決したい問題、使っている方法を2〜3文で詳しく説明する。
## ✨ 主な特徴
- 特徴1:ベースライン画像分類モデルを学習する- 特徴2:指標と予測例を保存する- 特徴3:実験を再実行する手順を記録する
## 🛠️ 技術スタック
- Python 3.11- PyTorch 2.0- その他使っているライブラリ
## 🚀 クイックスタート
### 環境構築
```bashgit clone [email protected]:yourname/project.gitcd projectpip install -r requirements.txt```
### 実行
```bashpython 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 を更新する”# 上のテンプレートを使って README を書く(内容は簡易版)cat > README.md << 'READMEEOF'# AI 画像分類器
CNN を使って CIFAR-10 データセットを画像分類する入門プロジェクトです。
## 技術スタック
- Python 3.11- PyTorch 2.0
## クイックスタート
```bashgit clone [email protected]:zhangsan/ai-image-classifier.gitcd ai-image-classifierpip install -r requirements.txtpython src/train.pyプロジェクト構成
Section titled “プロジェクト構成”ai-image-classifier/├── data/ # データファイル(gitignore 対象)├── models/ # モデルの重み(gitignore 対象)├── src/│ ├── model.py # CNN モデル定義│ ├── train.py # 学習スクリプト│ └── utils.py # ユーティリティ関数├── .gitignore├── requirements.txt└── README.mdREADMEEOF
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 した、など)。解決方法は次のとおりです。
```bashgit pull # 先にリモートの更新を取得するgit push # そのあとで push するclone が遅い
Section titled “clone が遅い”日本国内や中国国内では、GitHub プロジェクトの clone が遅いことがあります。対処法はいくつかあります。
# 方法1:最新バージョンだけを clone する(完全な履歴は取らない)。かなり速くなる
# 方法2:ミラーを使って高速化する# github.com をミラーサイトに置き換える(具体的なミラーURLは、最新の利用可能なものを検索してください)間違ったリポジトリに push してしまった
Section titled “間違ったリポジトリに push してしまった”# 現在関連付けられているリモートリポジトリを確認するgit remote -v
# リモートリポジトリのURLを変更する| コマンド | 用途 | いつ使うか |
|---|---|---|
git remote add origin URL | リモートリポジトリを関連付ける | 新しいプロジェクトを初めて push する前 |
git push | ローカルの commit をリモートに送る | 機能が完成したあと |
git pull | リモートの更新をローカルに取り込む | 作業を始める前 |
git clone URL | リモートリポジトリをローカルにダウンロードする | プロジェクトを初めて取得するとき |
日常の流れ:pull → コードを書く → add → commit → push。とてもシンプルです。