0.はじめに
これまで、add,commit,push の使い方と、clone, merge, pull の使い方を学んできました。
今回は、他の人が公開しているプロジェクトに参加したり、そのコードを安全に自分の環境で試したりするための重要な機能である「Fork (フォーク)」について学習していきます。
1.基本的な用語
1.1.Forkとは?
Forkとは、GitHubの機能の一つで、他のユーザーが公開しているリポジトリを、自分の GitHub アカウントに丸ごとコピーすることを指す。
コピーして作成されたリポジトリ(Fork したリポジトリ)に対しては、自分の所有物として扱われ、自身の管理下で自由にコードの編集など検証することが可能となる。
そして元のプロジェクト(Fork 元)にとって有益だと考えられる場合、その変更を取り込んでもらうように「プルリクエスト」を送ることも可能で、元のプロジェクトの所有者があなたの「プルリクエスト」内容を確認し、問題がなければマージ(統合)することも可能です。
1.2.clone と Fork の違い
項目 | git clone | Fork (GitHub 機能) |
---|---|---|
目的 | リモートリポジトリをローカル環境にコピーする | 他のユーザーのリポジトリを自分の GitHub アカウントにコピーする |
実行場所 | ローカル環境のターミナル | GitHub の Web サイト |
元のリポジトリとの関係 | 通常 origin として接続。 Push 権限がなければ直接変更不可。 |
GitHub で Fork 元との関連が記録。 自分の Fork リポジトリには自由に Push が可能。 Fork 元への変更提案は Pull Request で実施 |
2.ハンズオン
前提条件
- GitHubにアカウントが作成済みである
- GoogleCloud の CloudShell環境から実施
本ハンズオンの想定フロー
①Fork して自分の GitHubアカウントにコピー
②clone して自身のローカルで作業
③ローカルで作業後、自分の Fork リポジトリに Push し、Fork元に「プルリクエスト」
④Fork元で「マージ」の判断
2.1.Fork して自分の GitHubアカウントにコピー
今回は、GitHub が公式に用意している練習用のリポジトリ octocat/Spoon-Knife を使います。
スプーン、ナイフときたら??フォークです! fork していきましょう!
2.1.1.Fork 画面へ遷移
-
以下URL: https://github.com/octocat/Spoon-Knifeに遷移する
-
ページ右上に表示されている赤枠部分の「Fork」ボタンを押下
2.1.2.Fork の実行
以下を確認して赤枠の「Create fork」を押下
- 橙色:Owner/Repository name:Fork先(自分のGitHubアカウント/リポジトリ名)
- 緑色:Copy the main branch only:コピーするブランチ(mainブランチのみをコピー)
2.1.3.Forkしたリポジトリの確認
2.1.2.Fork の実行
後、自動的に自身の画面遷移される
そちら画面より Forkされていることを確認
2.2.clone して自身のローカルで作業
2.2.1.GitHubクローンを実施
- リポジトリをクローンする際は、YOUR_USERNAME 部分を、あなたの GitHub ユーザー名に置き換えて実行してください
# GitHubからリポジトリをクローン
git clone git@github.com:YOUR_USERNAME(例:tetutetu214)/Spoon-Knife.git
# クローンされたディレクトリに移動
cd Spoon-Knife
# 中身を確認
ls
2.2.2.ブランチ作成・変更
# 新しいブランチを作成し切り替え
git switch -c add-my-info
# ブランチの一覧を確認(*がついているのが現在のブランチ)
git branch
* add-my-info
main
# READMEに変更(YOUR_NAME部分は適宜置き換えてください)
echo "" >> README.md
echo "This repository was forked by YOUR_NAME (例:tetutetu214)." >> README.md
# 変更内容を確認します(最終行に追加を確認)
cat README.md
2.2.3.変更のコミット・push
# 変更をステージング
git add README.md
# 変更をコミット
git commit -m "Add contributor information to README"
# コミット履歴の確認
git log --oneline
# 変更をGitHubにプッシュ(ここまでのブランチの切り替え、変更を反映させる)
git push -u origin add-my-info
2.2.4.GitHubでの反映確認
- 上段赤枠部分の「ブランチ」を「main」から「add-my-info」に切替える
2.3.Fork元に「プルリクエスト」
- こちらの操作は、GitHub上で実施をします
2.3.1.プルリクエストページ遷移
- リポジトリページ上部「Compare & pull request」ボタンを押下
2.3.2.プルリクエスト先の設定
- 自身の変更を元のリポジトリに対して、プルリクエストをする設定
- 今回は「base repository が Fork 元 (octocat/Spoon-Knife)」で、「head repository が自分の Fork リポジトリ (あなたのユーザー名/Spoon-Knife)」 であることを確認。
2.3.3.プルリクエストの実施
- 画面右下赤枠部分の「Create pull request」を押下
※octocat/Spoon-Knife は練習用リポジトリのため、送ったプルリクエストが実際にマージされることは通常ありません。
2.3.4.プルリクエストの確認
- 元の「octocat/Spoon-Knife」の「Pull requests(赤枠部分)」にプルリクエストが反映されたことを確認
2.4.Fork元で「マージ」の判断
- こちらは「octocat/Spoon-Knife」の管理者により判断されるため、自身では実行不可
3.おわりに
3.1.得られた知見
- GitHub上でリポジトリをForkする具体的な手順を学ぶ
- ローカルコピー(Clone)とGitHubアカウントへのコピー(Fork)の目的と使い分けを理解した
3.2.今後の課題
- Pull Requestを送った際に発生しうるコンフリクトとその解消方法