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. 0から始める Git講座
    2022
    イマクリエイト株式会社 松迫翔悟
    1

    View full-size slide

  2. この講座の目的
    2
    Gitを使った
    効率的なチーム開発が
    出来るようになる

    View full-size slide

  3. 講座を始める前に...
    Windows
    • Git for Windows をダウンロード
    • GitHub Desktop をダウンロード(任意)
    …リポジトリの操作が可視化されるGitGUIクライアント
    Mac
    • OS X にはGitが標準で搭載されている
    • GitHub Desktop for Mac OS X をダウンロード(任意)
    3
    必要なツールの導入

    View full-size slide

  4. よくないチーム開発
    ヤバい点
    • 誰がどこをどう変更したのか分からない
    • プロジェクトを統合した時に競合 (Conflict)が起きやすい
    • 致命的なバグが発生しても「あの時点に戻りたい」が出来ない
    • バックアップが膨大になりストレージを圧迫する
    4
    × プロジェクトファイル一式を複製して各自のPCで作業
    × Google Drive 経由やUSBメモリーでファイルの
    やりとり、統合

    View full-size slide

  5. Gitを使ったチーム開発
    Gitのすごい点
    • 誰がどこをどう変更したのかが分かる!
    • 統合(merge)する時に競合を自動で分析する仕組みがあるため競合しづらい!
    • 「あの時点に戻りたい」が出来る!
    • 目的に応じて様々なバージョンに分岐できる。
    • バックアップでストレージを圧迫しない!
    Gitの欠点
    • 学習に時間がかかる →この講座で大体終了。
    • 慣れは必要
    5

    View full-size slide

  6. 世界中で使われるGit
    6
    ● Google
    ● Facebook
    ● Microsoft
    ● Twitter
    ● LINE
    ● GREE
    ● ...
    Gitを採用している企業
    ● Linux Kernel
    ● PostgreSQL
    ● Perl
    ● Ruby on Rails
    ● Eclipse
    ● Android
    ● ...
    Gitを使って開発されて
    いるもの

    View full-size slide

  7. Gitによる「分散バージョン管理」の全体像
    7
    リモート
    リポジトリ
    Bくんの
    ローカル
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    作業内容を
    コミット(commit)
    作業内容を
    コミット(commit)
    オフライン
    オンライン
    ローカルの変更を
    リモートに
    プッシュ(push) リモートの変更を
    ローカルに
    プル(pull)
    ローカルの変更を
    リモートに
    プッシュ(push)
    リモートの変更を
    ローカルに
    プル(pull)

    View full-size slide

  8. とりあえず
    始めてみましょう
    8

    View full-size slide

  9. 基本編
    1. 必要なツールの導入と環境構築
    2. ローカルリポジトリを操る
    ~個人開発の森を開拓~
    3. リモートリポジトリとやり取りする
    ~チーム開発の海に飛び込む~
    応用編
    1. 先に作ったローカルリポジトリをリモートと連携
    2. バージョン管理不要なファイルをignoreする
    3. GitLFS
    4. 「プルリクエスト」で安全なブランチ合流
    5. チーム開発の課題管理機能「Issue」を使ってみる
    Gitを実際に使ってみよう! ~目次~
    9

    View full-size slide

  10. 基本編
    1. 必要なツールの導入と環境構築
    2. ローカルリポジトリを操る
    ~個人開発の森を開拓~
    3. リモートリポジトリとやり取りする
    ~チーム開発の海に飛び込む~

    View full-size slide

  11. 講座を始める前に...
    Windows
    • Git for Windows をダウンロード
    • GitHub Desktop をダウンロード(任意)
    …リポジトリの操作が可視化されるGitGUIクライアント
    Mac
    • OS X にはGitが標準で搭載されている
    • GitHub Desktop for Mac OS X をダウンロード(任意)
    11
    必要なツールの導入

    View full-size slide

  12. 必要なツールの導入と環境構築 ②
    Gitコマンドが有効かどうか確認してみる
    • WindowsはGit Bash、Macはターミナルを開く
    • $ git --version と入力し、バージョン情報が出れば成功
    (Macは $sudo git --version が必要かもしれない)
    12
    Git Bash

    View full-size slide

  13. 必要なツールの導入と環境構築 ③
    ユーザー名とメールアドレスを設定する
    Githubアカウントのメールアドレスが望ましい
    • $ git config --global user.name “ユーザー名” で
    ユーザー名を登録
    • $ git config --global user.email “メールアドレス” で
    メールアドレスを登録
    13
    Git Bash

    View full-size slide

  14. 必要なツールの導入と環境構築 ④
    ユーザー名とメールアドレスが正しく設定できたかを確認するには
    $ git config --list と入力してみる
    14
    Git Bash

    View full-size slide

  15. 基本編
    1. 必要なツールの導入と環境構築
    2. ローカルリポジトリを操る
    ~個人開発の森を開拓~
    3. リモートリポジトリとやり取りする
    ~チーム開発の海に飛び込む~

    View full-size slide

  16. ローカルリポジトリを操る ~個人開発の森を開拓~ ①
    まずはローカルのリポジトリを操れるようになろう。
    これはつまり
    「1台のオフラインPCでバージョン管理を取り入れた
    個人開発が出来るようになる」
    ということだ
    16
    これさえ分かれば、
    どこでも効率的な
    個人開発ができるぜ!

    View full-size slide

  17. ローカルリポジトリを操る ~個人開発の森を開拓~ ②
    方針
    Git Bash (Macはターミナル) (CUI) を使う方法と
    GitHub Desktop (GUI) を使う方法
    同時に紹介していきます。どちらでやるかはお好みで。
    初心者向けはGitHub Desktopを使う方。
    もちろん好みで他のGUIツールを使用してよい。
    17

    View full-size slide

  18. ローカルリポジトリを操る ~個人開発の森を開拓~ ③
    開発プロジェクトのフォルダをGitリポジトリ化する(git init)
    1. PCの好きな場所に「SampleProject(名前は任意)」フォルダを作る
    2. Git Bash(Macならターミナル)を開き、作成したフォルダの場所に移動する
    例) $ cd "D:¥User¥Shogo Matsusako¥Documents¥SampleProject"
    3. $ git init と入力
    18
    $ cd の後にエクスプローラ
    からフォルダをD&Dも可能
    git init 後、
    (master) と表
    示される
    Git Bash

    View full-size slide

  19. ローカルリポジトリを操る ~個人開発の森を開拓~ ③
    開発プロジェクトのフォルダを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に提供...」

    View full-size slide

  20. ローカルリポジトリを操る ~個人開発の森を開拓~ ③
    1. アプリを起動し、「Create a New Repository on your hard drive...」
    2. 「Name」(リポジトリ名)を入力、「Description」(説明文)は任意
    3. 「Local path」でリポジトリを作る場所を指定
    20
    GitHub Desktop

    View full-size slide

  21. ローカルリポジトリを操る ~個人開発の森を開拓~ ③
    4.「Initialize this repository with a README」にチェックを入れると
    README.mdが入った状態のリポジトリができる
    5.「Git ignore」ではリポジトリに含めたくないファイルの種類を扱うアプリケー
    ションに応じて自動で選別して設定してくれる(超便利)
    例えば「Unity」を選べば、トラッキングする必要のないファイルを自動でignore
    してくれる(.gitignoreが作成される)
    21
    GitHub Desktop

    View full-size slide

  22. 先に作ったローカルリポジトリをリモートと連携 ①
    この時空のフォルダから初めてリポジトリ化する(git init しておらず .git
    の隠しファイルがない)場合は注意書きが出る。
    「create a repository」をクリックすればリポジトリにしてくれる(git
    init と同じことをしてくれる)
    22
    GitHub Desktop

    View full-size slide

  23. ローカルリポジトリを操る ~個人開発の森を開拓~ ④
    Gitリポジトリ化されたか確認してみる
    • .git という隠しフォルダができていれば成功!
    • この .git フォルダにバージョン管理に関する情報がすべて入っているので、絶
    対に消してはいけない
    • .git の存在を確認できたら、隠しフォルダを再度非表示にすれば誤って消して
    しまうのを防げる
    23

    View full-size slide

  24. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑤
    フォルダに適当なファイルを追加してみる
    1. エクスプローラ(MacならFinder)で「SampleProject」フォルダを開き、
    「新規作成」から「テキストドキュメント」を作成してみる。
    ファイル名は任意。本講座では以降「sample.txt」とする。
    2. sample.txt に何か書いてみて保存する
    3. Git Bash に戻り、
    $ git status と入力するとフォルダ(ディレクトリ)の変更点が表示される
    24
    Git Bash

    View full-size slide

  25. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑤
    1. 左のサイドバーに変更されたファイルが並び、
    中央に変更内容が表示される
    25
    text.txt に一行
    「Add Change」と加
    えた
    GitHub Desktop

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  28. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑦
    1. 左下のテキストボックスにコミットタイトルとメッセージを入力して
    「Commit to master」を押すだけ!
    2. Historyタブを見ると、今のコミットが追加されている。
    28
    GitHub Desktop

    View full-size slide

  29. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑧
    バージョン管理のための基本的な一連の流れを習得した!
    29

    View full-size slide

  30. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑨
    もう一度一連の流れをやってみよう
    1. バリバリ開発する
    2. Git Bash (Macならターミナル)を起動し、
    作業したディレクトリ(フォルダ)に入る
    $ cd
    3. 変更をステージ環境にあげる
    $ git add -A
    4. ステージ環境にあげた変更をローカルリポジトリにコミットする
    $ git commit -m “任意のコミットメッセージ”
    5. 大勝利。案外簡単でしょ。
    30

    View full-size slide

  31. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑨
    もう一度一連の流れをやってみよう
    1. バリバリ開発する
    2. GitHub Desktopを開く
    31
    ③ コミットタイトルと
    コミットメッセージを書く
    ④ コミット (git commit)
    GitHub Desktop

    View full-size slide

  32. ちょっと一休み
    次は「ブランチ」を自由に操ってみよう
    32

    View full-size slide

  33. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑩
    さて、こういうことがあるだろう
    • 今のプロジェクトの状態をベースに、複数の追加機能の実装をしたい
    • (チーム開発の話が少し入るが)
    バグ修正や機能追加を同時並行で進めて、後でそれらの成果を統合したい
    33
    画像:サルでもわかるGit入門

    View full-size slide

  34. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑪
    ブランチ(branch)
    並行して行われる複数の機能追加やバージョン管理を支援するGitの機能
    34

    View full-size slide

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

    View full-size slide

  36. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑫-2
    1. $ git checkout 新しいブランチ名 で、新しく作ったブランチに潜れる。
    2. パスの横の(master)の表示が(新しいブランチ名)になったのが確認できる
    はず
    36
    【応用】
    $ git checkout -b 新しいブランチ名 で、新しいブランチの作成と
    チェックアウトを一度に行える
    Git Bash

    View full-size slide

  37. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑫
    ブランチを切る
    1. メニューの「Branch」>「New branch...」
    (この時「Current branch」が正しいかをチェック)
    2. 「Name」に新しいブランチ名を入力し、「Create branch」
    3. 新しく作ったブランチに自動的にCheckout(切り替え)している
    37
    GitHub Desktop

    View full-size slide

  38. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑬
    新しいブランチでsample.txtの内容を変更してみる
    1. sample.txtを編集・保存
    2. 一連の流れをやる
    a. $ git add -A
    b. $ git commit -m “change sample.txt”
    3. 新しいブランチ(develop)に新規のコミットが追加された
    38
    Git Bash

    View full-size slide

  39. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑬
    新しいブランチでsample.txtの内容を変更してみる
    1. sample.txtを編集・保存
    2. GitHub Desktopを開く
    39
    ③ コミットメッセージを書く
    ④ コミット (git commit)
    GitHub Desktop

    View full-size slide

  40. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑭
    ブランチを切り替える(checkout)
    1. 今は「新しいブランチ(develop)」にいる
    2. masterブランチに戻ってみよう
    $ git checkout master
    3. sample.txtを見てみよう
    4. 編集内容がもとに戻っている、、、
    5. 成功です。
    40
    ブランチ切り替え(checkout)
    develop master

    View full-size slide

  41. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑭
    GitHub Desktopでも簡単にcheckout できる
    1. 「Current branch」タブをクリック
    2. 移りたい(Checkoutしたい)ブランチをダブルクリックするだけ
    41
    GitHub Desktop

    View full-size slide

  42. ローカルリポジトリを操る ~個人開発の森を開拓~ ⑮
    できるようになったこと
    • コミット(commit)
    プロジェクトフォルダ内の変更内容にコメントを付けて管理できるようになった!
    • ブランチを新しく作る
    現在の状態から新しいブランチを作成することができるようになった!
    • ブランチを切り替える
    今いるブランチから他のブランチに切り替えることができるようになった!
    42

    View full-size slide

  43. 基本編
    1. 必要なツールの導入と環境構築
    2. ローカルリポジトリを操る
    ~個人開発の森を開拓~
    3. リモートリポジトリとやり取りする
    ~チーム開発の海に飛び込む~

    View full-size slide

  44. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ①-1
    SSHキーを取得する
    特にGitLFSを使用する際には必須
    1. WindowsはGit Bash、Macはターミナルを開く
    2. $ ssh-keygen -t rsa と入力し、SSHキーを生成
    3. 生成される場所を聞かれるのでそのまま進める
    4. パスフレーズを要求されるので好きなパスフレーズを
    二度入力。リモートリポジトリとのやり取りの際に毎回聞かれるのが面倒
    なら空欄でもよい。
    44

    View full-size slide

  45. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ①-2
    うまくいっていればユーザーフォルダ直下の「.ssh」フォルダに、秘密鍵
    (id_rsa)と公開鍵(id_rsa.pub)のペアが生成されているはず。
    45

    View full-size slide

  46. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ②
    Githubのアカウントを作成する
    今回、リモートリポジトリの作成にGithubというサービスを使う。
    Githubのアカウントを持っていない場合は公式サイトからユーザー登録し
    よう。
    https://github.com/
    Email認証(Verify email address)も済ませてしまおう
    46

    View full-size slide

  47. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ③-1
    GithubにSSHキーを登録する
    1. 先ほど作成した id_rsa.pub をエディタやメモ帳で開き、中の文字列をコ
    ピーする
    ssh-rsa… となっているはず
    2. GitHubのページの右上端にあるアイコンをクリックして、アカウントメ
    ニューの中にある「Settings」を開く
    47

    View full-size slide

  48. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ③-2
    1. 左側のメニューから「SSH and GPG keys」タブを選択
    2. 「New SSH key」をクリック
    3. Title:分かりやすいキー名前(任意)
    例)MyNotePC
    Key:先ほどコピーしたid_rsa.pubの文字列を貼り付け
    1. 入力したら「Add SSH key」
    48

    View full-size slide

  49. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ④-1
    Githubでリポジトリを作成する
    1. トップページの「New repository」をクリック
    2. Repository name にリポジトリの名前(任意)を入力
    3. 無料版でパブリックリポジトリとプライベートリポジトリの両方が使え

    4. Initialize this repository with a README にチェックを入れて
    README.md を自動生成してもらう
    5. Create repository をクリック
    49

    View full-size slide

  50. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ④-2
    50

    View full-size slide

  51. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ④-3
    今作ったのはリモートリポジトリ
    51
    リモート
    リポジトリ
    Bくんの
    ローカル
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    まだない まだない

    View full-size slide

  52. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑤-1
    リポジトリをローカルにクローンする(clone)
    1. Githubで作成したリポジトリを選択し、
    「Clone or download」をクリック
    2. Clone with SSH (HTTPになっている場合は Use SSHを選択)で、
    文字列をコピーする
    52

    View full-size slide

  53. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑤-2
    1. Git Bash(Macはターミナル)を開き、リポジトリを置きたい場所に
    移動する
    例)$ cd ~/Documents
    2. $ git clone コピーした文字列 と入力
    3. ローカルにリポジトリがクローンされた
    53
    リモート
    リポジトリ
    Bくんの
    ローカル
    リポジトリ
    自分の
    ローカル
    リポジトリ
    オフライン
    オンライン
    clone
    まだない
    Git Bash

    View full-size slide

  54. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑤
    1. 「File」>「Clone repository...」
    2. 自分のGitHubアカウントにあるリモートリポジトリが一覧表示されるので選択。
    自分の以外のリポジトリをクローンする場合は「URL」でリポジトリのクローン
    URLを入力する
    3. 「Local path」で
    リポジトリの保存先
    を指定
    4. 「Clone」をクリック
    54
    GitHub Desktop

    View full-size slide

  55. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑥
    これで見事ローカルリポジトリとリモートリポジトリが紐づけられ、いつで
    も相互にやり取りができる状態になった
    55
    リモート
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン

    View full-size slide

  56. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑦
    あの日を思い出し、もう一度ローカルリポジトリに
    変更をコミットしてみよう
    1. バリバリ開発する
    2. Git Bash (Macならターミナル)を起動し、
    作業したディレクトリに入る
    $ cd
    3. 変更をステージ環境にあげる
    $ git add -A
    4. ステージ環境にあげた変更をローカルリポジトリにコミットする
    $ git commit -m “任意のコミットメッセージ”
    56
    Git Bash

    View full-size slide

  57. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑦
    新しいブランチでsample.txtの内容を変更してみる
    1. バリバリ開発する
    2. GitHub Desktopを開く
    57
    ③ コミットメッセージを書く
    ④ コミット (git commit)
    GitHub Desktop

    View full-size slide

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

    View full-size slide

  59. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑧
    ローカルリポジトリの変更をリモートリポジトリに反映する(push)
    1. 変更がすべてcommitされていること(No local changes)を確認し、
    「Publish repository」
    59
    GitHub Desktop

    View full-size slide

  60. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑨
    ローカルリポジトリの変更をリモートリポジトリに反映できた!
    これがpushするということ。
    60
    リモート
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    最新の変更
    最新の変更
    が反映!

    View full-size slide

  61. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑩-1
    Aさんの作業をBくんのローカルに反映したい
    61
    リモート
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    Bくんの
    ローカル
    リポジトリ
    差分なし
    Aさんの最新の作業分だけ差がある

    View full-size slide

  62. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑩-2
    Bくんのローカルにリポジトリが存在しない場合(Bくんがチーム開発に参加して一番最初)
    1. Bくんは $ git clone をする
    2. Bくんのローカルリポジトリは、cloneした時点でのリモートリポジトリの最新状態と同じ
    になるため、プルは不要
    62
    リモート
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    Bくんの
    ローカル
    リポジトリ
    clone
    まるごと
    クローン!

    View full-size slide

  63. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑩-3
    Bくんがローカルにすでにリポジトリをクローンしている場合
    • Bくんは $ git pull をすればいいだけ
    63
    リモート
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    Bくんの
    ローカル
    リポジトリ
    pull

    View full-size slide

  64. しかしここで
    チーム開発の落とし穴が
    64

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  67. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-1
    競合を避けるために...
    1. ブランチを切って作業し
    2. 2つの異なるブランチの差分を比較してマージ (統合)する
    チーム開発の肝となるルールと仕組み
    67

    View full-size slide

  68. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-1
    競合を避けるために...
    1. ブランチを切って作業し
    2. 2つの異なるブランチの差分を比較してマージ (統合)する
    チーム開発の肝となるルールと仕組み
    68
    チームメンバーが
    守るべきルール
    Gitに搭載された
    便利な仕組み

    View full-size slide

  69. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-3
    ブランチを切って作業をすると...
    それぞれがリモートにpushしても競合しない!
    69
    リモート
    リポジトリ
    Bくんの
    ローカル
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    Aさんの作業
    ブランチ
    Bくんの作業
    ブランチ

    View full-size slide

  70. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-3
    2つの異なるブランチの差分を比較してマージ(merge)
    70
    リモート
    リポジトリ
    Bくんの
    ローカル
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    Aさんの作業
    ブランチ
    Bくんの作業
    ブランチ
    差分を比較して
    問題なかったので
    マージ!

    View full-size slide

  71. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑬
    差分を比較して競合が起こるのはどういうときか?
    • 複数人が同じファイルに別々の変更を加えていた時
    • 誰かがフォルダ階層構造をガラリと変えてしまっていた時
    など、ある一つのファイルについての変更が複数あった場合
    71

    View full-size slide

  72. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑬
    競合が起こらないようにするには?
    72
    誰の作業ブランチでもない
    developブランチを主体とする
    ことで競合を防ぐ
    プルリクエストについては後述
    リモート上で差分を比較し
    修正・マージできる超便利機能
    【競合を避けるためのルールの例】
    • 必ずdevelopブランチからブランチを切り、自分の作業をする。
    • 他人のブランチとのマージは行わず、必ずdevelopブランチとのマージのみにする。
    その際必ずプルリクエストを出し、管理者の承認を待つ。
    チーム内でGit利用のルールを明確にし、正しく守ること

    View full-size slide

  73. 基本編、終了
    Gitの大まかな仕組みと、個人・チームでの基本的な
    バージョン管理の方法を習得した!
    73

    View full-size slide

  74. 基本編
    1. 必要なツールの導入と環境構築
    2. ローカルリポジトリを操る
    ~個人開発の森を開拓~
    3. リモートリポジトリとやり取りする
    ~チーム開発の海に飛び込む~
    応用編
    1. 先に作ったローカルリポジトリをリモートと連携
    2. バージョン管理不要なファイルをignoreする
    3. GitLFS
    4. 「プルリクエスト」で安全なブランチ合流
    5. チーム開発の課題管理機能「Issue」を使ってみる
    Gitを実際に使ってみよう! ~目次~
    74

    View full-size slide

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

    View full-size slide

  76. 先に作ったローカルリポジトリをリモートと連携 ①
    先にローカルリポジトリを作ってバージョン管理を進めており、途中から
    リモートと連携したくなった時
    例)・個人開発で進めていたものをチーム開発に切り替えたい
    ・ローカルで開発しているものをバックアップとしてリモートにあげておきたい
    76
    リモート
    リポジトリ
    Bくんの
    ローカル
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    まだない
    まだない
    ある
    連携
    させたい

    View full-size slide

  77. 先に作ったローカルリポジトリをリモートと連携 ②-1
    Githubで空のリポジトリを作成する
    1. トップページの「New repository」をクリック
    2. Repository name にリポジトリの名前(任意)を入力
    3. パブリックリポジトリかプライベートリポジトリかは
    任意
    4. Initialize this repository with a README にチェックを入れない。
    (リポジトリが空じゃなくなるから)
    5. Create repository をクリック
    77

    View full-size slide

  78. 先に作ったローカルリポジトリをリモートと連携 ②-2
    リモートに空のリポジトリをつくる(READMEファイルを入れない!)
    78

    View full-size slide

  79. 先に作ったローカルリポジトリをリモートと連携 ③-1
    ちゃんと空だと、リポジトリのページのTopがこんな感じになる
    79

    View full-size slide

  80. 先に作ったローカルリポジトリをリモートと連携 ③-2
    今こういう状態
    次にローカルリポジトリをリモートにコピーして連携させる
    80
    リモート
    リポジトリ
    Bくんの
    ローカル
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    ある
    まだない
    ある
    まだ連携
    していない
    (二つのリポジトリは別物)

    View full-size slide

  81. 先に作ったローカルリポジトリをリモートと連携 ④
    (開発進行中の)ローカルリポジトリに戻ろう
    $ git push をしてみても
    「No configured push destination.(プッシュ先が設定されていませ
    ん)」と言われる。
    それはそう。
    81
    Git Bash

    View full-size slide

  82. 先に作ったローカルリポジトリをリモートと連携 ⑤-1
    その下に出てきた指示に従う
    $ git remote add
    は何でもいいが、Githubに作った空のリポジトリと同じ名前にし
    たほうが分かりやすい
    はGithubのページから作った空のリポジトリの
    SSHパスをコピーしてくる
    82
    Git Bash

    View full-size slide

  83. 先に作ったローカルリポジトリをリモートと連携 ⑤-2
    に入れるリモートリポジトリのSSHのパスをコピー
    (sshキーが通ってる前提。42ページ当たり参照)
    83

    View full-size slide

  84. こんな感じ
    $ git remote add

    なんでもよい(Githubに作った空のリポジトリと同じ名前にしたほうが分
    かりやすい)

    Githubのページから作った空のリポジトリのSSHパス
    これでリモートリポジトリが登録された
    先に作ったローカルリポジトリをリモートと連携 ⑤-3
    84
    Git Bash

    View full-size slide

  85. $ git push をする
    まだ成功はしないが、
    $ git push --set-upstream … と見たことのあるメッセージが。
    「今pushしようとしているブランチがリモートに登録されていいないから
    しろ」ということ
    先に作ったローカルリポジトリをリモートと連携 ⑤-4
    85
    Git Bash

    View full-size slide

  86. GitBashさんのいう通りにしてみると...
    プッシュできた!!
    先に作ったローカルリポジトリをリモートと連携 ⑤-5
    86
    Git Bash

    View full-size slide

  87. 先に作ったローカルリポジトリをリモートと連携 ⑤-6
    ブラウザでGithubのリポジトリのページを読み込みなおしてみると...
    プッシュできてる!!!
    87

    View full-size slide

  88. 先に作ったローカルリポジトリをリモートと連携 ①
    1. 「File」>「Add local repository...」
    2. リモートと連携したいフォルダのパスを入力(選択)
    この時フォルダがリポジトリになっていない(git init しておらず .gitの隠し
    ファイルがない)場合は注意書きが出る。
    「create a repository」をクリックすればリポジトリにしてくれる
    (git init と同じことをしてくれる)
    88
    GitHub Desktop

    View full-size slide

  89. 先に作ったローカルリポジトリをリモートと連携 ②
    リポジトリの作成は前やったことと同じ
    1. 「Name」(リポジトリ名)を入力、「Description」(説明文)は任意
    2. 「Local path」でリポジトリを作る場所を指定
    3. 「Initialize this repository with a README」にチェックを入れると
    README.mdが入った状態のリポジトリができる
    4. 「Git ignore」ではリポジトリに含めたくないファイルの種類を扱う
    アプリケーションに応じて自動で選別して設定してくれる(超便利)
    次はこの「Git ignore」の話
    89
    GitHub Desktop

    View full-size slide

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

    View full-size slide

  91. バージョン管理不要なファイルをignoreする ①
    Git ignoreとは...
    無視する(Gitのトラッキングの対象外とする)ファイル やディレクトリを
    指定できる
    91

    View full-size slide

  92. バージョン管理不要なファイルをignoreする ②
    Git ignoreとは...
    無視する(Gitのトラッキングの対象外とする)ファイル やディレクトリを
    指定できる
    【例えばUnity開発の場合】
    開発内容の変更に関わるのは
    ・Assetsフォルダ
    ・ProjectSettingsフォルダ
    ・Packagesフォルダだけで、
    LibraryフォルダやTempフォルダはUnityのバージョンや利用者の環境ごとに生成される
    処理データなので、Gitリポジトリに含めてチームメンバーと共有する必要はない。
    むしろ共有してそれぞれの環境でプロジェクトを開くと不具合を起こすことがある。
    92

    View full-size slide

  93. バージョン管理不要なファイルをignoreする ③
    Git ignoreの使い方
    .gitignore ファイルがリポジトリに格納されていればよい
    .gitignore ファイルに無視したいファイルを指定する
    93

    View full-size slide

  94. バージョン管理不要なファイルをignoreする ④
    .gitignore の書き方
    詳しい書き方についての説明は省きます。
    Qiitaの記事などを各自参照してください。
    [Git] .gitignoreの仕様詳解 - Qiita
    94

    View full-size slide

  95. バージョン管理不要なファイルをignoreする ⑤
    .gitignore の書き方
    例えばUnity開発の場合

    (自分で0から書いてもいいけど...)
    だいたいネットにあるので、コピペして使うのが無難。
    あとはGitHub Desktopでも出てくるGit ignoreライブラリから持ってくる
    のが吉。
    A collection of useful .gitignore templates
    95

    View full-size slide

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

    View full-size slide

  97. Git LFS ①-1
    Git LFSとは?
    Git Large File Storage の略で、大きいサイズのバイナリファイル
    ・jpg,pngなどの画像ファイル
    ・mp3,wavなどの音声ファイル
    ・avi,mp4などの動画ファイルなど
    をバージョン管理するための仕組み
    97

    View full-size slide

  98. Git LFS ①-2
    Git LFSとは?
    GitHubのリモートリポジトリは100MBまでしか一度にプッシュできない
    100MB以上のファイルを扱う際はGit LFSの出番!
    98

    View full-size slide

  99. Git LFS ②
    Git LFSの仕組みざっくりと
    99
    リモート
    リポジトリ
    Bくんの
    ローカル
    リポジトリ
    Aさんの
    ローカル
    リポジトリ
    オフライン
    オンライン
    バイナリファイルそのものは
    LFSサーバーに保存され、
    保存場所のURL(文字列)が
    リモートリポジトリに保存される
    プルした際はバイナリの保存場所
    URLを参照してLFSサーバーから
    取ってくる
    LFS
    サーバー
    バイナリファイルの
    保存場所情報
    プッシュ
    (push)
    プル
    (pull)

    View full-size slide

  100. GitLFS ③-1
    Git LFSの使い方
    • Git Bash で $ git lfs install をする
    最近はGit Bashインストール時点でLFSを自動で導入してくれているっぽい
    • $ git lfs track "*.<指定したい拡張子>" で登録していく
    (例)$ git lfs track "*.jpg"
    あるいは .gitattributes ファイルを作り手動でトラック対象を設定する
    • $ git lfs track でトラック対象の確認
    100

    View full-size slide

  101. GitLFS ③-2
    .gitattributes が入っている様子。もちろん.gitignoreと共存できる
    101

    View full-size slide

  102. GitLFS ④
    ただGit LFS、エラーや分かりづらい挙動が多い...
    (個人の見解)
    エラーが起こるときの例
    • 100MB以内のためリポジトリにそのままプッシュできていたファイルを途
    中からLFSのトラッキング対象にするとき
    • GitLFSのパッケージが変なところにある
    例)gitコマンドが/usr/binにいるにもかかわらず、git-lfsが/usr/local/binにイ
    ンストールされている
    • LFSストレージや転送量の上限を超えた場合
    例えばGitHubの無料枠だとストレージの上限が1GB、
    転送量上限が1GB/月
    102

    View full-size slide

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

    View full-size slide

  104. 「プルリクエスト」で安全なブランチ合流 ①
    プルリクエストとは?
    チーム開発において競合が起こらないようにするために、
    レビュワー(管理者)に自分の作業ブランチを他のブランチに
    マージしていいか申請する機能。
    「プル」リクエストというよりは「マージ」リクエストといった感じ。
    リモートリポジトリでの話で、Git言語自身の機能ではなくGithubや
    Bitbucketなどのリポジトリサービスが提供する便利機能。
    104

    View full-size slide

  105. 「プルリクエスト」で安全なブランチ合流 ②-1
    「Pull requests」タブから「New pull request」を選択
    105

    View full-size slide

  106. 「プルリクエスト」で安全なブランチ合流 ②-2
    マージしたいブランチを選択し、「Create pull request」
    106

    View full-size slide

  107. 「プルリクエスト」で安全なブランチ合流 ②-3
    レビュワーに伝わるようプルリクエストタイトルと内容を記入し、
    「Create pull request」
    107

    View full-size slide

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

    View full-size slide

  109. チーム開発の課題管理機能「Issue」を使ってみる ①
    Issueとは?
    チーム開発における課題管理機能。
    Trelloのカードや紙ベースで課題管理をすることがあるが、
    GithubのIssue機能を使えばブランチやPull Request、変更履歴をIssueと
    紐づけて管理することが出来る。
    つまりチーム開発における情報が、
    「複数サービスに分散せずGithubだけに一元化されて分かりやすくなる」
    というメリットがある。
    109

    View full-size slide

  110. チーム開発の課題管理機能「Issue」を使ってみる ②-1
    新しいIssueを作ってみよう
    リモートリポジトリのトップページ
    「Issues」タブ→「New Issue」
    110

    View full-size slide

  111. チーム開発の課題管理機能「Issue」を使ってみる ②-2
    Issueのタイトルや提案内容を記入する
    依頼相手に分かりやすいように!
    111
    Issueを割り当てるメンバーを設定
    Issueのタイトル
    提案内容の説明

    View full-size slide

  112. チーム開発の課題管理機能「Issue」を使ってみる ③-1
    プロジェクトのスケジュールを管理する
    「マイルストーン」とIssueを紐づけたり...
    112
    3月15日までのMilestoneに
    Issueが一つ紐づけられている

    View full-size slide

  113. チーム開発の課題管理機能「Issue」を使ってみる ③-2
    課題の種類に応じて「ラベル」をつけられたり...
    (オリジナルのラベルも作成可能)
    113
    バグ修正してくれ~~
    ○○の新機能実装オナシャス
    この実装もっと詳しく説明頼む

    View full-size slide

  114. 参考文献
    Git の基礎勉強 〜Git によるバージョン管理を使う〜
    今日からはじめるGitHub 〜 初心者がGitをインストールして、
    プルリクできるようになるまでを解説
    サルでもわかるGit入門
    Git-flowって何?
    Gitチートシート - Qiita
    Issueのテンプレートを作る話
    GitHub の Issue Template を複数設定して使い分ける
    114

    View full-size slide

  115. 0から始める Git講座
    2022
    イマクリエイト株式会社 松迫翔悟
    115

    View full-size slide