Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Basic lecture of Git and GitHub 2021

Basic lecture of Git and GitHub 2021

2021年度版Git/GitHub基礎講座です。
スライドのご利用は自由にどうぞ。
(事前に連絡をいただけるとありがたいです。連絡先は https://cordx.net/ よりご確認ください。)

Kaoru Chisen

May 26, 2021
Tweet

More Decks by Kaoru Chisen

Other Decks in Programming

Transcript

  1. 事前準備 ❖ 講座を受講する前に、次の事前準備を行っておくとよいでしょう ➢ Linux環境の構築 ▪ 詳しくはWSL2講座で ▪ Ubuntuを利用する場合は20.04を利用してください! •

    比較的新しいバージョンの gitを使いたいため ➢ gitのインストール ▪ UbuntuやDebianの場合 $ sudo apt update $ sudo apt install -y git ➢ GitHubアカウントの作成 ▪ https://github.com/join からアカウントを作成してください • Usernameは自分のハンドルネームなど好きなものを入力してください 2
  2. 目次 - 前編 ❖ 導入 ➢ Gitとは ➢ バージョン管理システムとは ❖

    Gitの仕組み ➢ リポジトリ(repository) ➢ コミット(commit) ➢ ステージングエリア( staging area) ➢ ブランチ(branch) ➢ マージ(merge) 4
  3. 目次 - 後編 ❖ リモートリポジトリを使った開発 ➢ リモートリポジトリの意義 ➢ クローン(clone) ➢

    プル / プッシュ(pull / push) ➢ 共同開発での利用 ❖ GitHubの活用 ➢ GitHubとは ➢ Fork ➢ Issue ➢ Pull Request ➢ その他の機能 ❖ GitHub Pagesを使ってみよう 5
  4. リポジトリ(repository) ❖ 開発者はリモートからリポジトリをクローンするか、 ローカルでリポジトリを作成して、ローカルリポジトリとする ❖ クローンしてきたリポジトリの場合、既にリモートリポジトリとの紐づけが されている ➢ クローンはダウンロードみたいな意味、詳しくは後述 ❖

    ローカルリポジトリに対してリモートリポジトリは名前を付けて複数 紐づけることができる ➢ デフォルトではoriginという名前が使われる ❖ リモートリポジトリは複数人で共同で開発を行うときに特に活用する 14
  5. リポジトリ(repository) ❖ 新しいディレクトリを作成し、ローカルリポジトリを初期化 $ mkdir ユーザ名.github.io $ cd ユーザ名.github.io $

    git init ➢ 「ユーザ名」には自分の GitHubのユーザ名を入れてください ❖ リモートリポジトリとの紐づけには、git remote addコマンドを利用する ➢ 後編で説明 15
  6. ステージングエリア(staging area) ❖ 次にコミットする対象となる変更を登録する場所 ❖ git addコマンドを利用して、ファイルの変更をステージングに乗せる ➢ これをステージするという ❖

    すべての変更の中から特定の変更をステージングエリアに乗せる / 乗せない をわけることで、どの変更をコミットに乗せるかを選択することができる 17
  7. ステージ & コミット(stage & commit) ❖ (index.htmlファイルを作成する) $ echo “Hello,

    world!” > index.html ❖ index.htmlファイルの変更をステージする $ git add index.html ❖ ステージされたすべての変更にコメントをつけてコミットする $ git commit -m “Hello, world!” ➢ -mはコミットメッセージをコマンド中で明示してコミットする、というオプション ➢ -m以降をつけずにコミットすると、テキストエディタが起動して、 長いコミットメッセージを入力することができる 18
  8. ブランチ(branch) ❖ ブランチ作成(ここではブランチ名をtestとする) $ git branch test ❖ ブランチを移動 $

    git switch test ❖ ブランチ作成 & 移動(上記2ステップを一括実行) $ git switch -c test2 ❖ ファイルを変更してコミットしてからブランチを移動すると、 他のブランチではファイル変更の影響を受けていない様子が確認できる ➢ 次のスライドで実際に確認してみる 21
  9. ブランチ(branch) ❖ 既存のファイル(index.html)にテキストを追記してコミット、内容を表示 $ echo “Hello, git!” >> index.html $

    git add index.html $ git commit -m “Hello, git!” $ cat index.html ❖ ブランチ一覧を表示する $ git branch ❖ ブランチを移動して、ファイルの中身が変わっていることを確認 $ git switch master $ cat index.html 22
  10. マージ(merge) ❖ ブランチ間のコードの差異を吸収し、一つのブランチにまとめること ❖ git mergeコマンドは今いるブランチに指定したブランチの変更を取り込む ❖ マージコミットを作ることができる ➢ マージしましたよ、というコミットのこと

    ❖ 自動で吸収できない差異があった場合(二つのブランチでコードの 同じ位置を更新していた場合など)、コンフリクトが発生し、 手動でどちらのコードにまとめるか決定してコミットする必要がある 23
  11. マージ(merge) ❖ masterブランチにtest2ブランチをマージ $ git switch master $ git merge

    test2 ❖ 上のコマンドでは、場合によってはマージコミットが生成されない ➢ 常にマージコミットの生成を強制する( Fast-Forwardマージをしないようにする)には 以下のコマンドを利用する $ git switch master $ git merge --no-ff test2 24
  12. プル / プッシュ(pull / push) ❖ プル(pull) ➢ 指定したリモートリポジトリのブランチを取得し、ローカルリポジトリの今いるブランチに 取得したブランチをマージすること

    ❖ プッシュ(push) ➢ ローカルリポジトリのコミットを指定したリモートリポジトリのブランチに反映させること 29
  13. 共同開発での利用 ❖ 共同開発では、サーバにリモートリポジトリを置いて、それを基軸に開発を 進める ➢ リモートリポジトリからクローンするか、またはローカルリポジトリから リモートリポジトリを作成 ➢ 開発を進め、ローカルリポジトリにコミットをしていく ➢

    適切なタイミング(実装の区切りのいいところ、マージしてほしいところなど)で リモートにプッシュする ❖ この流れがGitでリモートリポジトリを利用した開発の基本的な流れとなる 30
  14. Fork ❖ Forkは既存のリポジトリのコピーを自分のアカウントに追加できる機能 ❖ 既存のリポジトリのコピーを自分のリポジトリとして扱える ➢ 自由にコードの改変ができるようになる ❖ 元のリポジトリとは別の派生プログラムとして開発を続けることもできる ➢

    ただし、ライセンスには注意が必要 ❖ Forkしたリポジトリから、元のリポジトリの管理者にPull Requestを投げる ことで、自分の改変を元のリポジトリに取り込んでもらうこともできる ➢ Pull Requestについてはこの後解説 34
  15. Issue ❖ 直訳すると「問題」 ❖ GitHubでは問題点などを記述し共有することができる ➢ これをIssueと呼ぶ ❖ 共同開発でのコミュニケーションや実装課題の管理に非常に便利 ➢

    個人でToDo管理などに利用している例も見る ❖ GitHubのリポジトリを開いて、上部のタブからIssuesを開くことで 見られる 35
  16. Issue ❖ 基本的な利用の流れは次のようになる ➢ タイトル、問題点など議論すべきことを書いて、必要に応じ Assignees(担当者)とLabelを 付加して、Issueを発行する ➢ 以降、このIssueに関係するコミットには #Issue番号をコミットメッセージに書いて

    コミットするとよい ➢ 必要に応じてIssueにコメントを付けていくことで、議題について話し合うことができる ➢ Issueの議題が解消されれば、 Closeする ❖ この辺の慣習も詳細はプロジェクトごとに取り決めて、開発者全員で 共有すると良い 36
  17. Pull Request ❖ Pull RequestはIssueにソースコードを付加したもの ❖ リポジトリの管理者に、別ブランチや別リポジトリの変更を 該当リポジトリに取り込んでもらうために使う ❖ 基本機能はIssueと一緒

    ❖ Pull Requestの強い点は、他の人が簡単に開発に関与できるようになること ➢ 他の人が改善したソースコードを送ってきたり ➢ 自分が他の人に改善したソースコードを送ったり ❖ これらの開発コミュニケーションを円滑にしてくれる ➢ これがGitが分散型である恩恵のうちの一つ 38
  18. Pull Request ❖ Pull Requestが飛んできたら ➢ 飛んできたPull Requestの変更点をレビュー ➢ 必要に応じてコミュニケーションを取る

    ➢ 問題がなさそうであればマージ ❖ 他人のソースコードを変更したくなったら ➢ Forkする or ブランチを切る ➢ 変更をする ➢ 元リポジトリに対して Pull Requestを発行 ➢ コミュニケーションを取りつつ、マージしてもらう 39
  19. その他の機能 ❖ 他にも開発者を支援する機能がたくさんあります ➢ Projects ➢ Wiki ➢ Insights ❖

    詳細な説明は省きますが、調べてみてください ➢ 活用できるといいですね! 40
  20. GitHub Pagesを使ってみよう ❖ ここからは、プロジェクトのWebサイトを公開するのに利用できる 「GitHub Pages」の機能を利用して、自分のホームページを作りながら、 Git/GitHubに慣れ親しんでいきましょう ❖ 大まかな手順 ➢

    「ユーザ名.github.io」という名前でGitHubにリポジトリを作成 ▪ ユーザ名は自分のGitHubのユーザ名で置き換えてください ➢ index.htmlという名前でHTMLファイルを作成 ➢ GitHub上のリモートリポジトリにプッシュ ➢ http://ユーザ名.github.io/にアクセス 42
  21. リモートリポジトリの作成 ❖ https://github.com/new にアクセス ❖ Repository nameに「ユーザ名.github.io」と入力 ➢ ユーザ名は自分のGitHubのユーザ名で置き換えてください ❖

    それ以外は何も変更せずに(何にもチェックをつけず、Publicが選択されて いる状態で)Create repositoryボタンを押す 43
  22. リモートリポジトリにプッシュ ❖ GitHubのリモートリポジトリをローカルリポジトリに関連付けてプッシュ $ git switch master $ git remote

    add origin https://github.com/ユーザ名/ユーザ名.github.io $ git push origin master ➢ ユーザ名は自分のユーザ名で置き換えてください ➢ プッシュの際にユーザ名とパスワードを聞かれるので、入力してください ❖ http://ユーザ名.github.io/にアクセスして確認 ➢ 反映まで少し時間がかかります 44