Slide 1

Slide 1 text

Git/GitHub クックパッド サマーインターンシップ 10 Day Tech for service engineers

Slide 2

Slide 2 text

Git使ったことある人

Slide 3

Slide 3 text

この講義の内容 • Git/GitHubを使ったチーム開発での流れを理解する • Cookpadでのルールやワークフローを知る

Slide 4

Slide 4 text

Git

Slide 5

Slide 5 text

Git • 分散型のバージョン管理システム • Linuxの作者であるLinus Torvaldsによって開発された

Slide 6

Slide 6 text

Reference •Gitコマンドの使い方を調べる ‣ https://git-scm.com/docs ‣ git help •Gitを体系的に学ぶ ‣ https://git-scm.com/book/en/v2

Slide 7

Slide 7 text

•ユーザー設定 $ git config --global user.name "Your full name" $ git config --global user.email "your email address" •リポジトリ作成 $ mkdir -p ~/works/git-practice $ cd ~/works/git-practice $ git init •コミット $ echo '# Hello cookpad!' > README.md $ git add README.md $ git commit -m 'Add README.md'

Slide 8

Slide 8 text

コミットメッセージ •コミットメッセージは英語で書く(社内ルール) •1行目に概要を書く •必要に応じて3行目以降に詳細を書く

Slide 9

Slide 9 text

Branch

Slide 10

Slide 10 text

Branchとは •履歴を枝分かれさせることができる •複数の機能を同時に開発することができる •枝分かれした履歴は特定の枝(branch)に合流 (merge)することができる

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

•新しくブランチを作って切替 $ git branch new-branch $ git checkout new-branch •まとめてやる $ git checkout -b new-branch

Slide 13

Slide 13 text

merge •Gitは 3-way merge という賢いマージのアルゴリズム でマージする •2つのファイルを単純に比較するのではなくそれぞれの 共通の親と差分を比較する

Slide 14

Slide 14 text

merge $ git checkout master $ git merge new-branch [--ff/--no-ff]

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

fast forward merge

Slide 19

Slide 19 text

--no-ff

Slide 20

Slide 20 text

ff vs no-ff •Pull Requestのマージは merge commitをつくる •GitHubのUIからマージする
 場合はデフォルト no-ff

Slide 21

Slide 21 text

Recovery

Slide 22

Slide 22 text

•間違えてaddした $ git reset [] •間違えてコミットした $ git reset HEAD^ •間違えてファイルを編集したり消してしまったので元に戻したい $ git checkout $ git checkout .

Slide 23

Slide 23 text

•ブランチ名間違えた $ git branch -m new-branch-name •バグがあるコードをmasterにマージしてしまったので取り消したい $ git revert -m 1 •間違えてコミットを取り消した、マージしてないブランチを
 消してしまった $ git reflog $ git reset --hard

Slide 24

Slide 24 text

GitHub

Slide 25

Slide 25 text

GitHub •Gitのリモートリポジトリをホスティングするサービス •開発時に便利な様々な機能がある •現代の開発フローにおける中心的存在 •CookpadではGitHub Enterprise(GHE)を利用

Slide 26

Slide 26 text

ForkとPull Request •Fork ‣ 他の人のリモートリポジトリを自分のリポジトリとして コピーする機能 •Pull Request ‣ 自分が行った変更を元のブランチに取り込んでもらえる ように通知する機能

Slide 27

Slide 27 text

GitHub Work Flow 1. 変更対象のリポジトリをForkしてclone 2. branchを切って変更をcommit, push 3. Pull Request 4. コードレビュー 5. マージ

Slide 28

Slide 28 text

tech/cookpad_all your-name/cookpad_all Local Fork Pull Request push pull upstream origin

Slide 29

Slide 29 text

•forkしたリポジトリを手元にコピーする $ git clone git@ghe.ckpd.co:your-name/repo.git •作業ブランチを切る $ git checkout -b new-feature •変更をリモートリポジトリに反映する $ git commit -m $ git push origin new-branch

Slide 30

Slide 30 text

•upstreamのリモートリポジトリを設定 $ git remote add upstream git@ghe.ckpd.co:owner/repo.git •リモートリポジトリの設定を確認 $ git remote -v •最新の状態を手元に持ってくる $ git checkout master $ git pull upstream master

Slide 31

Slide 31 text

Practice

Slide 32

Slide 32 text

1. summer-intern/self-introduction をfork 2. 作業用ブランチを切る 3. "your-name.md" というファイルを作って簡単な自己紹介を書く 4. 変更をPushしてPull Requestを作成 5. マージされたらupstreamから最新の状態をローカルに反映する