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

0から始める Git講座 2022

0から始める Git講座 2022

バージョン管理ツール「Git」の初級者向け入門スライドです。
講義動画はコチラ
https://youtu.be/jGHR8omgXYw

Shogo Matsusako

September 09, 2022
Tweet

Other Decks in Programming

Transcript

  1. 講座を始める前に... Windows • Git for Windows をダウンロード • GitHub Desktop

    をダウンロード(任意) …リポジトリの操作が可視化されるGitGUIクライアント Mac • OS X にはGitが標準で搭載されている • GitHub Desktop for Mac OS X をダウンロード(任意) 3 必要なツールの導入
  2. よくないチーム開発 ヤバい点 • 誰がどこをどう変更したのか分からない • プロジェクトを統合した時に競合 (Conflict)が起きやすい • 致命的なバグが発生しても「あの時点に戻りたい」が出来ない •

    バックアップが膨大になりストレージを圧迫する 4 × プロジェクトファイル一式を複製して各自のPCで作業 × Google Drive 経由やUSBメモリーでファイルの やりとり、統合
  3. 世界中で使われるGit 6 • Google • Facebook • Microsoft • Twitter

    • LINE • GREE • ... Gitを採用している企業 • Linux Kernel • PostgreSQL • Perl • Ruby on Rails • Eclipse • Android • ... Gitを使って開発されて いるもの
  4. Gitによる「分散バージョン管理」の全体像 7 リモート リポジトリ Bくんの ローカル リポジトリ Aさんの ローカル リポジトリ

    作業内容を コミット(commit) 作業内容を コミット(commit) オフライン オンライン ローカルの変更を リモートに プッシュ(push) リモートの変更を ローカルに プル(pull) ローカルの変更を リモートに プッシュ(push) リモートの変更を ローカルに プル(pull)
  5. 基本編 1. 必要なツールの導入と環境構築 2. ローカルリポジトリを操る ~個人開発の森を開拓~ 3. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ 応用編

    1. 先に作ったローカルリポジトリをリモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4. 「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる Gitを実際に使ってみよう! ~目次~ 9
  6. 講座を始める前に... Windows • Git for Windows をダウンロード • GitHub Desktop

    をダウンロード(任意) …リポジトリの操作が可視化されるGitGUIクライアント Mac • OS X にはGitが標準で搭載されている • GitHub Desktop for Mac OS X をダウンロード(任意) 11 必要なツールの導入
  7. 必要なツールの導入と環境構築 ② Gitコマンドが有効かどうか確認してみる • WindowsはGit Bash、Macはターミナルを開く • $ git --version

    と入力し、バージョン情報が出れば成功 (Macは $sudo git --version が必要かもしれない) 12 Git Bash
  8. 必要なツールの導入と環境構築 ③ ユーザー名とメールアドレスを設定する Githubアカウントのメールアドレスが望ましい • $ git config --global user.name

    “ユーザー名” で ユーザー名を登録 • $ git config --global user.email “メールアドレス” で メールアドレスを登録 13 Git Bash
  9. ローカルリポジトリを操る ~個人開発の森を開拓~ ② 方針 Git Bash (Macはターミナル) (CUI) を使う方法と GitHub

    Desktop (GUI) を使う方法 同時に紹介していきます。どちらでやるかはお好みで。 初心者向けはGitHub Desktopを使う方。 もちろん好みで他のGUIツールを使用してよい。 17
  10. ローカルリポジトリを操る ~個人開発の森を開拓~ ③ 開発プロジェクトのフォルダをGitリポジトリ化する(git init) 1. PCの好きな場所に「SampleProject(名前は任意)」フォルダを作る 2. Git Bash(Macならターミナル)を開き、作成したフォルダの場所に移動する

    例) $ cd "D:¥User¥Shogo Matsusako¥Documents¥SampleProject" 3. $ git init と入力 19 $ cd の後にエクスプローラ からフォルダをD&Dも可能 git init 後、 (master) と表 示される これ本当に毎回重要!! コマンドプロンプトで正しいディレクトリにいないと 「あれ、.git がない?」 「間違えてrootにgit init してもうて気付かずにpushしてもうた。 PC内の全ファイルGithubに提供...」
  11. ローカルリポジトリを操る ~個人開発の森を開拓~ ③ 1. アプリを起動し、「Create a New Repository on your

    hard drive...」 2. 「Name」(リポジトリ名)を入力、「Description」(説明文)は任意 3. 「Local path」でリポジトリを作る場所を指定 20 GitHub Desktop
  12. ローカルリポジトリを操る ~個人開発の森を開拓~ ③ 4.「Initialize this repository with a README」にチェックを入れると README.mdが入った状態のリポジトリができる

    5.「Git ignore」ではリポジトリに含めたくないファイルの種類を扱うアプリケー ションに応じて自動で選別して設定してくれる(超便利) 例えば「Unity」を選べば、トラッキングする必要のないファイルを自動でignore してくれる(.gitignoreが作成される) 21 GitHub Desktop
  13. ローカルリポジトリを操る ~個人開発の森を開拓~ ④ Gitリポジトリ化されたか確認してみる • .git という隠しフォルダができていれば成功! • この .git

    フォルダにバージョン管理に関する情報がすべて入っているので、絶 対に消してはいけない • .git の存在を確認できたら、隠しフォルダを再度非表示にすれば誤って消して しまうのを防げる 23
  14. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑥ ディレクトリの変更をステージ環境にあげる(add) 1. $ git add -A で変更内容をすべてステージ環境にあげる。

    ステージ環境とは 「gitのローカルリポジトリに上げる準備が整った環境」 のことである 26 作業をする (ディレクトリの内容を変更) ステージ ローカル リポジトリ git add 「やっぱステージか ら外す」もできる git reset ここにあるものを 今回の変更点とし てコミットするよ git commit
  15. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑦ ステージ環境にあがった変更をリポジトリに保存する (commit) 1. $ git commit -m

    “コミットメッセージ” でステージ環境にあげた変更を ローカルリポジトリに保存できる。 この時 -m “コミットメッセージ(任意)” オプションを付けることでコミットの タイトルをつけることができる。 2. 今回は初めてのコミットなので $git commit -m “FirstCommit” とするとそれっぽくなる 27 Git Bash
  16. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑨ もう一度一連の流れをやってみよう 1. バリバリ開発する 2. Git Bash (Macならターミナル)を起動し、

    作業したディレクトリ(フォルダ)に入る $ cd 3. 変更をステージ環境にあげる $ git add -A 4. ステージ環境にあげた変更をローカルリポジトリにコミットする $ git commit -m “任意のコミットメッセージ” 5. 大勝利。案外簡単でしょ。 30
  17. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑫-1 ブランチを切る 1. いま存在するブランチを確認してみよう $ git branch で確認できる

    2. 新しいブランチを作る $ git branch 新しいブランチ名 (本スライドではdevelopにする) 3. $ git branch で確認すると、新しくブランチができている。 35 Git Bash
  18. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑫-2 1. $ git checkout 新しいブランチ名 で、新しく作ったブランチに潜れる。 2.

    パスの横の(master)の表示が(新しいブランチ名)になったのが確認できる はず 36 【応用】 $ git checkout -b 新しいブランチ名 で、新しいブランチの作成と チェックアウトを一度に行える Git Bash
  19. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑫ ブランチを切る 1. メニューの「Branch」>「New branch...」 (この時「Current branch」が正しいかをチェック) 2.

    「Name」に新しいブランチ名を入力し、「Create branch」 3. 新しく作ったブランチに自動的にCheckout(切り替え)している 37 GitHub Desktop
  20. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑬ 新しいブランチでsample.txtの内容を変更してみる 1. sample.txtを編集・保存 2. 一連の流れをやる a. $

    git add -A b. $ git commit -m “change sample.txt” 3. 新しいブランチ(develop)に新規のコミットが追加された 38 Git Bash
  21. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑭ ブランチを切り替える(checkout) 1. 今は「新しいブランチ(develop)」にいる 2. masterブランチに戻ってみよう $ git

    checkout master 3. sample.txtを見てみよう 4. 編集内容がもとに戻っている、、、 5. 成功です。 40 ブランチ切り替え(checkout) develop master
  22. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ①-1 SSHキーを取得する 特にGitLFSを使用する際には必須 1. WindowsはGit Bash、Macはターミナルを開く 2. $

    ssh-keygen -t rsa と入力し、SSHキーを生成 3. 生成される場所を聞かれるのでそのまま進める 4. パスフレーズを要求されるので好きなパスフレーズを 二度入力。リモートリポジトリとのやり取りの際に毎回聞かれるのが面倒 なら空欄でもよい。 44
  23. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ③-1 GithubにSSHキーを登録する 1. 先ほど作成した id_rsa.pub をエディタやメモ帳で開き、中の文字列をコ ピーする ssh-rsa…

    となっているはず 2. GitHubのページの右上端にあるアイコンをクリックして、アカウントメ ニューの中にある「Settings」を開く 47
  24. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ③-2 1. 左側のメニューから「SSH and GPG keys」タブを選択 2. 「New

    SSH key」をクリック 3. Title:分かりやすいキー名前(任意) 例)MyNotePC Key:先ほどコピーしたid_rsa.pubの文字列を貼り付け 1. 入力したら「Add SSH key」 48
  25. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ④-1 Githubでリポジトリを作成する 1. トップページの「New repository」をクリック 2. Repository name

    にリポジトリの名前(任意)を入力 3. 無料版でパブリックリポジトリとプライベートリポジトリの両方が使え る 4. Initialize this repository with a README にチェックを入れて README.md を自動生成してもらう 5. Create repository をクリック 49
  26. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑤-2 1. Git Bash(Macはターミナル)を開き、リポジトリを置きたい場所に 移動する 例)$ cd ~/Documents

    2. $ git clone コピーした文字列 と入力 3. ローカルにリポジトリがクローンされた 53 リモート リポジトリ Bくんの ローカル リポジトリ 自分の ローカル リポジトリ オフライン オンライン clone まだない Git Bash
  27. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑦ あの日を思い出し、もう一度ローカルリポジトリに 変更をコミットしてみよう 1. バリバリ開発する 2. Git Bash

    (Macならターミナル)を起動し、 作業したディレクトリに入る $ cd 3. 変更をステージ環境にあげる $ git add -A 4. ステージ環境にあげた変更をローカルリポジトリにコミットする $ git commit -m “任意のコミットメッセージ” 56 Git Bash
  28. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑧ ローカルリポジトリの変更を リモートリポジトリに反映する(push) 1. Git Bash (Macならターミナル)で $

    git status と入力し、現在のディレクトリに何も変更点がないことを 確認する 2. ローカルのコミットをプッシュする $ git push 3. ここで多くの場合 「git branch --set-upstream-to … をやれ」みたいなエラーが出るかも しれない。 コピペしてEnterし、再度 $ git push する 58 Git Bash
  29. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑩-2 Bくんのローカルにリポジトリが存在しない場合(Bくんがチーム開発に参加して一番最初) 1. Bくんは $ git clone をする

    2. Bくんのローカルリポジトリは、cloneした時点でのリモートリポジトリの最新状態と同じ になるため、プルは不要 62 リモート リポジトリ Aさんの ローカル リポジトリ オフライン オンライン Bくんの ローカル リポジトリ clone まるごと クローン!
  30. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑪-1 AさんとBくんが同時に異なる作業をしていた場合、 リモートにあるAさんの変更とBくんのローカルの変更が競合する。 65 リモート リポジトリ Aさんの ローカル

    リポジトリ オフライン オンライン Bくんの ローカル リポジトリ pull 違う変更がかぶるから プル出来ないよ。 Aさんの コミット Bくんの コミット Aさんの コミット
  31. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑪-2 AさんとBくんが同時に異なる作業をしていた場合、 リモートにあるAさんの変更とBくんのローカルの変更が競合する。 66 リモート リポジトリ Aさんの ローカル

    リポジトリ オフライン オンライン Bくんの ローカル リポジトリ push Bくんからプッシュも 出来ないよ... Aさんの コミット Bくんの コミット Aさんの コミット
  32. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-3 2つの異なるブランチの差分を比較してマージ(merge) 70 リモート リポジトリ Bくんの ローカル リポジトリ

    Aさんの ローカル リポジトリ オフライン オンライン Aさんの作業 ブランチ Bくんの作業 ブランチ 差分を比較して 問題なかったので マージ!
  33. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑬ 競合が起こらないようにするには? 72 誰の作業ブランチでもない developブランチを主体とする ことで競合を防ぐ プルリクエストについては後述 リモート上で差分を比較し

    修正・マージできる超便利機能 【競合を避けるためのルールの例】 • 必ずdevelopブランチからブランチを切り、自分の作業をする。 • 他人のブランチとのマージは行わず、必ずdevelopブランチとのマージのみにする。 その際必ずプルリクエストを出し、管理者の承認を待つ。 チーム内でGit利用のルールを明確にし、正しく守ること
  34. 基本編 1. 必要なツールの導入と環境構築 2. ローカルリポジトリを操る ~個人開発の森を開拓~ 3. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ 応用編

    1. 先に作ったローカルリポジトリをリモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4. 「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる Gitを実際に使ってみよう! ~目次~ 74
  35. 応用編 75 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.

    「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる
  36. 先に作ったローカルリポジトリをリモートと連携 ②-1 Githubで空のリポジトリを作成する 1. トップページの「New repository」をクリック 2. Repository name にリポジトリの名前(任意)を入力

    3. パブリックリポジトリかプライベートリポジトリかは 任意 4. Initialize this repository with a README にチェックを入れない。 (リポジトリが空じゃなくなるから) 5. Create repository をクリック 77
  37. 先に作ったローカルリポジトリをリモートと連携 ③-2 今こういう状態 次にローカルリポジトリをリモートにコピーして連携させる 80 リモート リポジトリ Bくんの ローカル リポジトリ

    Aさんの ローカル リポジトリ オフライン オンライン ある まだない ある まだ連携 していない (二つのリポジトリは別物)
  38. 先に作ったローカルリポジトリをリモートと連携 ⑤-1 その下に出てきた指示に従う $ git remote add <name> <url> <name>

    は何でもいいが、Githubに作った空のリポジトリと同じ名前にし たほうが分かりやすい <url>はGithubのページから作った空のリポジトリの SSHパスをコピーしてくる 82 Git Bash
  39. こんな感じ $ git remote add <name> <url> <name> なんでもよい(Githubに作った空のリポジトリと同じ名前にしたほうが分 かりやすい)

    <url> Githubのページから作った空のリポジトリのSSHパス これでリモートリポジトリが登録された 先に作ったローカルリポジトリをリモートと連携 ⑤-3 84 Git Bash
  40. $ git push <name> をする まだ成功はしないが、 $ git push --set-upstream

    … と見たことのあるメッセージが。 「今pushしようとしているブランチがリモートに登録されていいないから しろ」ということ 先に作ったローカルリポジトリをリモートと連携 ⑤-4 85 Git Bash
  41. 先に作ったローカルリポジトリをリモートと連携 ① 1. 「File」>「Add local repository...」 2. リモートと連携したいフォルダのパスを入力(選択) この時フォルダがリポジトリになっていない(git init

    しておらず .gitの隠し ファイルがない)場合は注意書きが出る。 「create a repository」をクリックすればリポジトリにしてくれる (git init と同じことをしてくれる) 88 GitHub Desktop
  42. 先に作ったローカルリポジトリをリモートと連携 ② リポジトリの作成は前やったことと同じ 1. 「Name」(リポジトリ名)を入力、「Description」(説明文)は任意 2. 「Local path」でリポジトリを作る場所を指定 3. 「Initialize

    this repository with a README」にチェックを入れると README.mdが入った状態のリポジトリができる 4. 「Git ignore」ではリポジトリに含めたくないファイルの種類を扱う アプリケーションに応じて自動で選別して設定してくれる(超便利) 次はこの「Git ignore」の話 89 GitHub Desktop
  43. 応用編 90 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.

    「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる
  44. バージョン管理不要なファイルをignoreする ② Git ignoreとは... 無視する(Gitのトラッキングの対象外とする)ファイル やディレクトリを 指定できる 【例えばUnity開発の場合】 開発内容の変更に関わるのは ・Assetsフォルダ

    ・ProjectSettingsフォルダ ・Packagesフォルダだけで、 LibraryフォルダやTempフォルダはUnityのバージョンや利用者の環境ごとに生成される 処理データなので、Gitリポジトリに含めてチームメンバーと共有する必要はない。 むしろ共有してそれぞれの環境でプロジェクトを開くと不具合を起こすことがある。 92
  45. 応用編 96 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.

    「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる
  46. Git LFS ①-1 Git LFSとは? Git Large File Storage の略で、大きいサイズのバイナリファイル

    ・jpg,pngなどの画像ファイル ・mp3,wavなどの音声ファイル ・avi,mp4などの動画ファイルなど をバージョン管理するための仕組み 97
  47. Git LFS ② Git LFSの仕組みざっくりと 99 リモート リポジトリ Bくんの ローカル

    リポジトリ Aさんの ローカル リポジトリ オフライン オンライン バイナリファイルそのものは LFSサーバーに保存され、 保存場所のURL(文字列)が リモートリポジトリに保存される プルした際はバイナリの保存場所 URLを参照してLFSサーバーから 取ってくる LFS サーバー バイナリファイルの 保存場所情報 プッシュ (push) プル (pull)
  48. GitLFS ③-1 Git LFSの使い方 • Git Bash で $ git

    lfs install をする 最近はGit Bashインストール時点でLFSを自動で導入してくれているっぽい • $ git lfs track "*.<指定したい拡張子>" で登録していく (例)$ git lfs track "*.jpg" あるいは .gitattributes ファイルを作り手動でトラック対象を設定する • $ git lfs track でトラック対象の確認 100
  49. GitLFS ④ ただGit LFS、エラーや分かりづらい挙動が多い... (個人の見解) エラーが起こるときの例 • 100MB以内のためリポジトリにそのままプッシュできていたファイルを途 中からLFSのトラッキング対象にするとき •

    GitLFSのパッケージが変なところにある 例)gitコマンドが/usr/binにいるにもかかわらず、git-lfsが/usr/local/binにイ ンストールされている • LFSストレージや転送量の上限を超えた場合 例えばGitHubの無料枠だとストレージの上限が1GB、 転送量上限が1GB/月 102
  50. 応用編 103 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.

    「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる
  51. 応用編 108 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.

    「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を 使ってみる