Slide 1

Slide 1 text

2019.5.26 #ハックツトレジャー

Slide 2

Slide 2 text

会場について 福岡の会員制コワーキングスペース 福岡のエンジニア、デザイナーの集まる場所 @geekstudio_

Slide 3

Slide 3 text

リモート参加の方のために、講義の模様をライブ配信します。 アーカイブで残るのであとで見返すこともできます。 ToDo :: URLここに貼る ライブ配信について ※試験的な試みのため、機材不良や回線不良その他のトラブルで うまく配信ができない可能性があります。ご了承ください。

Slide 4

Slide 4 text

株式会社ハックツが主催する学生エンジニア向け勉強会。 隔月で開催する「ハックツハッカソン」とともに 他大学の学生との交流や技術的アウトプットの機会を提供し、 福岡の学生エンジニアコミュニティのさらなる発展と 個々の技術力向上を目指して運営しています。 #ハックツトレジャー でツイートしよう! ハックツトレジャーとは

Slide 5

Slide 5 text

Keisuke Mory 今日しゃべる人 株式会社ハックツCTO、近畿大学産業理工学部
 東京のメガベンチャーや福岡の企業で主にサーバーサイドの開発を行う RubyとGoが好きで最近は Lightning Network に興味津々

Slide 6

Slide 6 text

今日の流れ  13:15 講義 14:15 休憩    (お菓子デプロイ) 14:45 ハンズオン 16:45 ふり返り 17:00 解散   6

Slide 7

Slide 7 text

今日のゴール • バージョン管理と Git の概念を知る • GitHubを使ったバージョン管理を理解する • GitHubを使ったチーム開発の流れを理解する • ハンズオンを通して基本操作を理解する 7

Slide 8

Slide 8 text

講義スタート

Slide 9

Slide 9 text

アジェンダ - 講義編 • バージョン管理とは • バージョン管理の何が嬉しいの? • Git と GitHub どう違うの? • 操作で使う用語を知ろう • コミット • ブランチ • クローン、プル、プッシュ • マージ • Git を使った開発の流れを知ろう • ひとりで開発する例 • チーム開発をする例 9

Slide 10

Slide 10 text

バージョン管理とは

Slide 11

Slide 11 text

バージョン管理 ファイルを変更前の状態に戻したいとき…… → 前もっていじりたいファイルのコピーを作ったり、日付をいれたり。 11 カオスだしどれが最新なの

Slide 12

Slide 12 text

リポジトリ ソースコードなどを置いておくデータベース的なやつ 12 ローカルリポジトリ リモートリポジトリ 皆のPCにあるデータベース 変更の履歴は全部自分のPCにある 自分のPCがお亡くなりになったら終わり オンライン上にあるデータベース 変更履歴を複数人で共有する リモート インターネット

Slide 13

Slide 13 text

Git と GitHub の違い バージョン管理を行うしくみ。 「分散バージョン管理システム」のこと 類似のものとして、Subversion や CVS がある 13 リモートリポジトリを管理してくれるWebサービス GitLab, Bitbucketなど類似サービスあり とりあえず登録しておこう。

Slide 14

Slide 14 text

用語を知ろう

Slide 15

Slide 15 text

コミット(commit) ローカルにファイルの変更履歴を保存する => ローカルに保存するだけなので、リモートには保存されない 15 こんな感じで コミットが増えていきます

Slide 16

Slide 16 text

コミットID 各コミットに振られる固有のID 16 コミットIDは基本的に重複しない (厳密には重複することもあるけど今回のスコープ外なので省略)

Slide 17

Slide 17 text

コミットの中身 17 親コミットのコミットID  1個前のコミットのコミットID Author、作成された時間  コミットの操作をした人 コミットメッセージ  コミットでの変更内容などを端的に表したメッセージ  (後述) ツリーオブジェクト  ファイルの変更内容 この他にもあるが、説明の都合上割愛

Slide 18

Slide 18 text

コミットの中身 18 親コミットのコミットID  1個前のコミットのコミットID Author、作成された時間  コミットの操作をした人、コミットの時間 コミットメッセージ  コミットでの変更内容などを端的に表したメッセージ  (後述) ツリーオブジェクト  ファイルの変更内容 この他にもあるが、説明の都合上割愛

Slide 19

Slide 19 text

コミットグラフ/コミットID よくあるコミットグラフの例 19 " # $ コミット”B” は、親であるコミット”A”の コミットIDを持っている。 aaafd… bbfc98… cc8c7… 最新

Slide 20

Slide 20 text

コミットグラフ/コミットID よくあるコミットグラフの例 20 " # $ コミット”C” は、親であるコミット”B” のコミットIDを持っている。 aaafd… bbfc98… cc8c7… 最新

Slide 21

Slide 21 text

コミットグラフ/コミットID よくあるコミットグラフの例 21 " # $ • それぞれのコミットは1つ前のコミットのコミットIDを持つ。 • コミットIDは重複しないため、コミットとコミットIDは1対1関係になる。 • 最新のコミットから最古のコミットを順々にたどれる!! aaafd… bbfc98… cc8c7… 最新

Slide 22

Slide 22 text

ブランチ(branch) 開発ラインのこと。ある特定の開発ラインをから、新しい開発ライン (=ブランチ)を作ることを「ブランチを切る」と言う。 22 メインの開発ライン 別の開発ライン • 同時に複数人で同じプロジェクトの開発を進めることができる! • バグ調査や新機能追加など、目的別に開発ラインをつくれる! • 開発用、リリース用、ベータ用など開発フェーズを表すこともできる!

Slide 23

Slide 23 text

リモートのリポジトリの内容を、ローカルリポジトリにごっそり全部 ダウンロードすること クローン(clone) 23 こんなときに! • 新しいプロジェクトの開発に参加する • オープンソースのプロジェクトを手元で動かしてみたい

Slide 24

Slide 24 text

プル(pull) リモートリポジトリの変更履歴をローカルリポジトリに反映させること 24 最新 最新  リモートリポジトリのほうが  ローカルリポジトリよりも  開発が進んでいる Before

Slide 25

Slide 25 text

プル(pull) リモートリポジトリの変更履歴をローカルリポジトリに反映させること 25 最新 最新  Pullすることで、リモートの  変更内容がローカルに反映! After

Slide 26

Slide 26 text

プル(pull) リモートリポジトリの変更履歴をローカルリポジトリに反映させること 26 こんなときに! • 最新のリモートのコミットを取り込みたいとき • リモートのリポジトリを自分以外がいじったとき ここ注意! • ローカルの変更内容をコミットせずにプルすることはできない

Slide 27

Slide 27 text

プッシュ(push) リモートリポジトリにローカルリポジトリの内容をアップロードすること 27 最新 最新  ローカルリポジトリで開発を  行い、コミットをする  リモートには、ローカルでの  変更が反映されていない Before

Slide 28

Slide 28 text

プッシュ(push) リモートリポジトリにローカルリポジトリの内容をアップロードすること 28 最新 最新  プッシュすることで、  リモートにローカルでの  変更が反映された!! After

Slide 29

Slide 29 text

プッシュ(push) リモートリポジトリにローカルリポジトリの内容をアップロードすること 29 こんなときに! • とりあえず Commit したら Push する • バックアップになる(手元のマシンがお亡くなりになっても何とかなる) • 他の人が変更を把握できる ここ注意! • 誰かとファイルの変更内容が被ったら コンフリクト を起こすこともある • 後半のハンズオンでコンフリクトの話をします

Slide 30

Slide 30 text

マージ(merge) 現在のブランチに対して、別のコミットの変更内容を統合する 30 master develop  master と develop   最後の共通コミット   現在の master の最新   現在の develop の最新 A B C Before

Slide 31

Slide 31 text

マージ(merge) 現在のブランチに対して、別のコミットの変更内容を統合する 31 develop  master と develop   最後の共通コミット master コミット A, B, C の変更が 含まれた ”マージコミット” が master の先頭に追加される A B C develop After

Slide 32

Slide 32 text

リセット(reset) 状態を前に戻すコマンド とりあえず —soft と —hard の2種類あるのを覚えておこう (ハンズオンでやります) 32 こんなときに! • ミスった!さっきのコミットやめたい!(変更したファイルは残したい)
 → - - soft • さっきの git add やっぱなし!
 → 引数なし • 変更したファイルも消す!とりあえず前に戻す!  → - - head

Slide 33

Slide 33 text

Gitを使った開発の流れを知ろう

Slide 34

Slide 34 text

個人でやってみる - イチから作るVer. 1. ローカルリポジトリを作成する 2. リモートリポジトリを作成する(GitHub) 3. リモートリポジトリを設定する 4. ファイルをいじる 5. いじったファイルをステージングに追加する 6. コミットする 7. プッシュする 34

Slide 35

Slide 35 text

個人でやってみる - 既存のリポジトリをさわるVer. 1. お目当てのリポジトリをクローンする 2. ファイルをいじる 3. いじったファイルをステージングに追加する 4. コミットする 5. プッシュする 35

Slide 36

Slide 36 text

複数人でやってみる 1. ブランチの運用ルールを決める 2. 代表者がリモートリポジトリを作成する(GitHub) 3. リモートリポジトリにコラボレーターを追加する 4. 該当のリポジトリをクローンする 5. 作業用ブランチを切る 6. ファイルをいじる 7. いじったファイルをステージングに追加する 8. コミットする 9. プッシュする 10.メインのブランチにマージする 36

Slide 37

Slide 37 text

後半のハンズオンでは、この3つのパターンをやります

Slide 38

Slide 38 text

ちょっと休憩 14:15 〜 14:45

Slide 39

Slide 39 text

ハンズオンについて ハンズオン資料はこちら https://github.com/moririn772/git-handson 39 ※GitHubへの登録がまだの方はこの時間中に登録を済ませてください。

Slide 40

Slide 40 text

アジェンダ - ハンズオン編 • 基本コマンドを知る • GitHubの設定 • 個人でやってみる - イチから作るVer. • 個人でやってみる - 既存のリポジトリをさわるVer. • 複数人でやってみる 40

Slide 41

Slide 41 text

基本コマンドを知る

Slide 42

Slide 42 text

clone リモートリポジトリからごっそりダウンロードしてくるとき git clone 目的のリポジトリ 42 git clone git@github.com:moririn772/git-handson.git

Slide 43

Slide 43 text

status 今のリポジトリの状態を見たいときに使う 43 git status こんなときに! • コミットしてないファイルってどれだ? • ステージングに登録してないファイルってどれだ?

Slide 44

Slide 44 text

diff 変更を確認する - ファイル名を指定:該当ファイルの変更を表示 - コミットIDを指定:該当コミットでの変更を表示 44 git diff มߋΛݟ͍ͨϑΝΠϧ໊ or σΟϨΫτϦ
 git diff ίϛοτID こんなときに! • あれ、このコミットってどこを変更したのかな? • このファイルどこ変更したか確認したいな

Slide 45

Slide 45 text

add , commit Add : 変更をステージングに反映させる Commit : 変更履歴を保存する 45 git add Readme.md git add . git commit -m “ίϛοτϝοηʔδ” git commit -am “ίϛοτϝοηʔδ”  git add . と  git commit -m を  同時にやってくれる  変更を全部ステージングに  登録する

Slide 46

Slide 46 text

push リモートリポジトリにローカルリポジトリの内容を反映させること 46 git push origin master

Slide 47

Slide 47 text

pull リモートリポジトリの変更履歴をローカルリポジトリに反映させること 47 git pull origin master git pull -u origin master  -u オプションをつけると、次回以降  git pull と打つだけで origin master をPullしてくれる

Slide 48

Slide 48 text

branch - 何もつけない → 現在のブランチを表示 - -a オプションをつけると → リモートのブランチも表示 - 任意の名前をつける → 現在のブランチを親に、新しくブランチを切る 48 git branch git branch -a git branch develop  現在のブランチ(master)を親に、  新しく develop ブランチを切る。  ※これを行ってもブランチは移動していないので注意

Slide 49

Slide 49 text

checkout - 作業ブランチを切り替える 49 git checkout develop git checkout master ここ注意! • ローカルの変更内容をコミットせずにブランチを切り替えることはできない 他にも特定のCommitをチェックアウトできたりするが、今回は取り扱いません。  git stash を使うと変更をコミットせずにブランチを切り替えれますが、今回は取り扱いません。 気になる人は調べてみましょう。

Slide 50

Slide 50 text

merge 現在のブランチに対して、別のコミットの変更内容を統合する 50 git merge develop

Slide 51

Slide 51 text

merge 現在のブランチに対して、別のコミットの変更内容を統合する 51 master develop  master と develop   最後の共通コミット   現在の master の最新   現在の develop の最新 A B C Before

Slide 52

Slide 52 text

merge 現在のブランチに対して、別のコミットの変更内容を統合する 52 develop  master と develop   最後の共通コミット master A B C develop After git merge develop

Slide 53

Slide 53 text

コンフリクトについて 変更箇所が被ると “コンフリクト” が起きます。 コンフリクトが起きた場合は手動で解決しないといけません…… 53 <<<<<<< HEAD # ݱࡏ࡞ۀதͷϒϥϯνͰͷมߋ಺༰ ɾɾɾ ======= # develop(Ϛʔδͨ͠ϒϥϯν)Ͱͷมߋ಺༰ ɾɾɾ >>>>>>> develop 例:作業中のブランチにdevelopブランチをマージしようとしてコンフリクトした場合  ====== より  上が自分の変更  下がマージしたブランチの変更

Slide 54

Slide 54 text

コマンドチートシート 54 変更箇所をステージングに登録  git add 任意のファイル名  git add . (すべてのファイルに適用する場合) コミット  git commit -m “コミットメッセージ” プル  git pull origin ブランチ名 プッシュ  git push origin ブランチ名 新しくブランチを切る  git branch 新しいブランチ名 作業ブランチを変更する  git checkout ブランチ名 現在のブランチにマージする  git merge マージしたいブランチ名

Slide 55

Slide 55 text

最後に、便利なTipsの紹介を。

Slide 56

Slide 56 text

.gitignore_global ホームディレクトリ直下に置いておくと、全てのローカルリポジトリで 該当ファイルの変更が無視される。 56 .DS_Store .idea 僕の .gitignore_global Mac OSの管理ファイル、IDEのプロジェクト管理用フォルダを除外

Slide 57

Slide 57 text

GitHub Education を使ってみよう(学生限定) GitHub Educationを使うと…  - GitHub Proライセンスがタダ  - Heroku の Hobby Dyno が1つタダ  - AWS 無料クレジットがもらえる  - その他特典がめっちゃある 57 • ウマミが多い(学生って最高だね) • 学校の ac.jp のメールアドレスがあれば登録がとても楽 • 利用目的を英語で作文する必要がある(簡単に書いてOK) 登録と詳細は→ https://education.github.com/

Slide 58

Slide 58 text

皆さんGitは使えるようになりましたね?

Slide 59

Slide 59 text

Git使ってチーム開発やってみませんか?

Slide 60

Slide 60 text

ハッカソンっていうのがあるんですけど。

Slide 61

Slide 61 text

ハックツハッカソン - アロ杯 日程 :6/22(土) — 6/23(日) 会場 :天神某所 テーマ:社会人 vs. 学生 61 MVP賞 Amazon echo spot • 学生は交通費支給(上限1000円) • 宿泊場所提供(ここ) • 懇親会あり • スポンサー企業さんからFBあり エントリーはこちら https://cup.hackz.team/allo

Slide 62

Slide 62 text

今日はお疲れ様でした!

Slide 63

Slide 63 text

アンケートにご協力ください 63 右のQRからお願いします または https://bit.ly/2Hyllxv (1分ちょいで終わります)