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

明日から使おうGitLab入門

 明日から使おうGitLab入門

starling888888

February 15, 2020
Tweet

More Decks by starling888888

Other Decks in Programming

Transcript

  1. whoami? Ryo Uehara(@starling8+) 2 ▪ 県内某社のWebエンジニア(新米) ▪ DockerとNodeJSがメインスタック ▪ プライベートではUbuntuとHaskellい

    じってる ▪ アカウントの8の数は使ってるサービス で変わります ▪ 最近はアジャイルとかスクラムとか開発 スタイルも勉強中
  2. 1. GitLabとは – GitHubとは違うん? ▪ GitHubも同じようにGitを使った開発をサポートして くれるプラットフォーム ▪ GitLabより昔からサービスがありユーザが多い ▪

    GitLabは後述する自動テストが最初から使えるのでGood GitHubも使えるようになりました ▪ だいたいできることは同じ 8 先輩!
  3. 2. Gitとは – add & commit ▪ commit: ファイルの変更や作成の記録(とその操作) ▪

    commitすると ▫ 誰が ▫ いつ ▫ どのファイルに ▫ 前のcommitと比べてどんな変更があったか ▫ 変更者のメッセージ を記録した世界中でuniqueなidを持ったオブジェクトが 作られる 16
  4. 2. Gitとは – add & commit ▪ add: どの変更をcommitするかの決定 ▪

    commitする前に必要な操作 ▫ GUIツールを使っていると意識することはほとんどない 18
  5. 2. Gitとは – push 21 ローカル リポジトリ aaaaaa Initial commit

    bbbbbb Change fileA ababab Create fileB cccccc Update fileB リモート リポジトリ aaaaaa Initial commit bbbbbb Change fileA ababab Create fileB cccccc Update fileB git push
  6. 2. Gitとは – branch ▪ branch: commitを記録するための名前空間(のようなもの) ▪ 今までのcommitはmasterという特別なbranchで行 なっていた

    ▪ branchを作ってそのbranchにcommitすることで他の branchには一切影響を与えることなく作業できる 23
  7. 2. Gitとは – branch ブランチを切った地点から違う世界線としてそれぞれ commitが作られていく 24 aaaaaa Initial commit

    bbbbbb Change fileA ababab Create fileB cccccc Update fileB masterブランチ kkkkkkk Create fileC ssssss Update fileC feature-aブランチ
  8. 4. GitLabハンズオン–git xxx flow ▪ Git xxx flow: Gitを使った開発手法 ▫

    ブランチ戦略の1つ(どのようにブランチを切って開発、リリースをし ていくかの方法論) ▫ Git flow, GitHub flow, GitLab flowなどがある ▫ 今回は私が日頃使っているGitHub flowをベースにしたやり方を 紹介 35
  9. 4. GitLabハンズオン–our git flow 1. GitLabのプロジェクト上で 2. Issueを作り 3. IssueからMergeRequestを作り

    4. 作られたbranchで開発を行い 5. GitLabCIで自動テストを回し 6. MRでレビューしてもらって 7. レビュワーがマージして 8. タグを打ったら(自動で)リリース 36
  10. 4. GitLabハンズオン –Issue ▪ Issue: 直訳すると「問題」 ▪ プロジェクトで開発すべき機能、対応すべきバグをここ に登録する ▪

    Assignee(担当者)を決められる ▪ Open, Closeのステータスを持つ ▪ サンプルプロジェクトにはバグがすでにあるのでこれを 修正するIssueを作ってみましょう 39
  11. 4. GitLabハンズオン –Merge Request ▪ IssueからIssueを解決するbranchとMRをボタン1つ で作れる ▪ branchは最新のmaster branchを起点に作られる

    (変更もできる) ▪ 残念なお知らせ…… ▪ forkしたプロジェクトではIssueからMRが作れないです… ▪ そういう機能があると覚えておいて手動でやりましょう 44
  12. 4. GitLabハンズオン – Merge Request ▪ Merge Requestを(手動で)作るときの注意点 ▫ Branchの名前の先頭に[Issueの番号]-をつけましょう、

    branchがマージされると自動でIssueがcloseされます ▫ MergeRequestは”WIP”(Work In Progress)の状態 で作りましょう ▫ マージされる対象のbranchを確認しましょう(たまにmaster 以外になっていることがある) 46
  13. 4. GitLabハンズオン –ローカルでの開発 ▪ リモートで作ったbranchをローカルに持ってきてその ブランチで作業 ▪ ちょっと言葉の整理 ▫ fetch:

    最新のリモートリポジトリの状態を取得 ▫ リモートブランチをチェックアウト: リモートブランチのコ ピーをローカルに作る ▫ pull: ローカルブランチにリモートの同名のブランチの変更を取り 入れる 47
  14. 4. GitLabハンズオン –レビュー ▪ MRはGitLab上で変更が確認できる ▪ ソースコードに問題や疑問があったらコメントもできる ▪ Issueと同様に担当者を決められる ▪

    テストが失敗してたり、コンフリクトが発生してたらマージして はいけない(コンフリクトがあるとマージできない) 51
  15. 4. GitLabハンズオン –tagとリリース ▪ tag: commitに別名をつけること ▫ リポジトリ内でtag名はuniqueでなければいけない ▪ 私の開発スタイルではtagが打たれたらリリースのjobを走

    らせるとCIに設定してある ▫ tagは別にリリースのためにあるわけではない ▫ けどtagを打つと(GitLab上で)リリースノートを書ける 55 aaaaaa Initial commit bbbbbb Change fileA ababab Create fileB cccccc Update fileB 0.0.1
  16. 5.Tips - .gitignore ▪ .gitigonre: gitでバージョン管理を行う対象外の ファイルやディレクトリを指定できるファイル ▪ Gitでは基本的にソースコードなどテキストデータのみ 管理する

    ▪ ビルドしたバイナリデータなどは管理対象から外す ▪ “.gitignore LANGUAGE_NAME”で検索するとテンプ レートが出てくる 59
  17. 5.Tips – Issue Board ▪ IssueはOpen, ToDo, Doing, Closedをカンバン Likeに表示できるBoard機能がある

    ▪ カンバンもカスタマイズできる ▪ 日々のタスクもここで管理可能 ▫ カンバンのためだけにプロジェクト作ることもままある 61
  18. 5.Tips –revert ▪ Revert: 指定したcommitを打ち消すcommitを作る ▪ 過去のあるcommitまで戻したい場合は新しい方から順 番にrevertすれば良い 65 aaaaaa

    Initial commit bbbbbb Change fileA ababab Create fileB cccccc Update fileB dddddd Revert cccccc “cccccc”の変更を消すcommit、 ソースコードの状態は ”ababab”と 同じ
  19. 5.Tips –reset 67 ローカル リポジトリ aaaaaa Initial commit bbbbbb Change

    fileA ababab Create fileB cccccc Update fileB リモート リポジトリ aaaaaa Initial commit bbbbbb Change fileA ababab Create fileB cccccc Update fileB リセットォォォ!!!! git push なんか知らない状態のブランチが 来たねんけど
  20. 5.Tips –reset 68 ローカル リポジトリ aaaaaa Initial commit bbbbbb Change

    fileA ababab Create fileB cccccc Update fileB リモート リポジトリ aaaaaa Initial commit bbbbbb Change fileA リセットォォォ!!!! git push -f 他の人のローカルブランチと全く違 う状態のリモートブランチが出来上 がり、他の人の操作を受け付けな くなる!
  21. CREDITS Special thanks to all the people who made and

    released these awesome resources for free: ▪ Presentation template by SlidesCarnival ▪ Photographs by Unsplash 74