Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
0から始める Git講座 2022
Search
Shogo Matsusako
September 09, 2022
Programming
1
99
0から始める Git講座 2022
バージョン管理ツール「Git」の初級者向け入門スライドです。
講義動画はコチラ
https://youtu.be/jGHR8omgXYw
Shogo Matsusako
September 09, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
推し活としてのrails new/oshikatsu_ha_iizo
sakahukamaki
3
1.7k
/←このスケジュール表に立ち向かう フロントエンド開発戦略 / A front-end development strategy to tackle a single-slash schedule.
nrslib
1
590
Googleのテストサイズを活用したテスト環境の構築
toms74209200
0
270
EventSourcingの理想と現実
wenas
6
2.1k
PLoP 2024: The evolution of the microservice architecture pattern language
cer
PRO
0
1.6k
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
550
生成 AI を活用した toitta 切片分類機能の裏側 / Inside toitta's AI-Based Factoid Clustering
pokutuna
0
570
VR HMDとしてのVision Pro+ゲーム開発について
yasei_no_otoko
0
100
CSC305 Lecture 13
javiergs
PRO
0
130
破壊せよ!データ破壊駆動で考えるドメインモデリング / data-destroy-driven
minodriven
16
4k
Modern Angular: Renovation for Your Applications
manfredsteyer
PRO
0
210
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
830
Featured
See All Featured
Gamification - CAS2011
davidbonilla
80
5k
Writing Fast Ruby
sferik
626
61k
Ruby is Unlike a Banana
tanoku
96
11k
Fireside Chat
paigeccino
32
3k
YesSQL, Process and Tooling at Scale
rocio
167
14k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Faster Mobile Websites
deanohume
304
30k
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
Automating Front-end Workflow
addyosmani
1365
200k
Rails Girls Zürich Keynote
gr2m
93
13k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
9
680
GitHub's CSS Performance
jonrohan
1030
460k
Transcript
0から始める Git講座 2022 イマクリエイト株式会社 松迫翔悟 1
この講座の目的 2 Gitを使った 効率的なチーム開発が 出来るようになる
講座を始める前に... Windows • Git for Windows をダウンロード • GitHub Desktop
をダウンロード(任意) …リポジトリの操作が可視化されるGitGUIクライアント Mac • OS X にはGitが標準で搭載されている • GitHub Desktop for Mac OS X をダウンロード(任意) 3 必要なツールの導入
よくないチーム開発 ヤバい点 • 誰がどこをどう変更したのか分からない • プロジェクトを統合した時に競合 (Conflict)が起きやすい • 致命的なバグが発生しても「あの時点に戻りたい」が出来ない •
バックアップが膨大になりストレージを圧迫する 4 × プロジェクトファイル一式を複製して各自のPCで作業 × Google Drive 経由やUSBメモリーでファイルの やりとり、統合
Gitを使ったチーム開発 Gitのすごい点 • 誰がどこをどう変更したのかが分かる! • 統合(merge)する時に競合を自動で分析する仕組みがあるため競合しづらい! • 「あの時点に戻りたい」が出来る! • 目的に応じて様々なバージョンに分岐できる。
• バックアップでストレージを圧迫しない! Gitの欠点 • 学習に時間がかかる →この講座で大体終了。 • 慣れは必要 5
世界中で使われるGit 6 • Google • Facebook • Microsoft • Twitter
• LINE • GREE • ... Gitを採用している企業 • Linux Kernel • PostgreSQL • Perl • Ruby on Rails • Eclipse • Android • ... Gitを使って開発されて いるもの
Gitによる「分散バージョン管理」の全体像 7 リモート リポジトリ Bくんの ローカル リポジトリ Aさんの ローカル リポジトリ
作業内容を コミット(commit) 作業内容を コミット(commit) オフライン オンライン ローカルの変更を リモートに プッシュ(push) リモートの変更を ローカルに プル(pull) ローカルの変更を リモートに プッシュ(push) リモートの変更を ローカルに プル(pull)
とりあえず 始めてみましょう 8
基本編 1. 必要なツールの導入と環境構築 2. ローカルリポジトリを操る ~個人開発の森を開拓~ 3. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ 応用編
1. 先に作ったローカルリポジトリをリモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4. 「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる Gitを実際に使ってみよう! ~目次~ 9
基本編 1. 必要なツールの導入と環境構築 2. ローカルリポジトリを操る ~個人開発の森を開拓~ 3. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~
講座を始める前に... Windows • Git for Windows をダウンロード • GitHub Desktop
をダウンロード(任意) …リポジトリの操作が可視化されるGitGUIクライアント Mac • OS X にはGitが標準で搭載されている • GitHub Desktop for Mac OS X をダウンロード(任意) 11 必要なツールの導入
必要なツールの導入と環境構築 ② Gitコマンドが有効かどうか確認してみる • WindowsはGit Bash、Macはターミナルを開く • $ git --version
と入力し、バージョン情報が出れば成功 (Macは $sudo git --version が必要かもしれない) 12 Git Bash
必要なツールの導入と環境構築 ③ ユーザー名とメールアドレスを設定する Githubアカウントのメールアドレスが望ましい • $ git config --global user.name
“ユーザー名” で ユーザー名を登録 • $ git config --global user.email “メールアドレス” で メールアドレスを登録 13 Git Bash
必要なツールの導入と環境構築 ④ ユーザー名とメールアドレスが正しく設定できたかを確認するには $ git config --list と入力してみる 14 Git
Bash
基本編 1. 必要なツールの導入と環境構築 2. ローカルリポジトリを操る ~個人開発の森を開拓~ 3. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~
ローカルリポジトリを操る ~個人開発の森を開拓~ ① まずはローカルのリポジトリを操れるようになろう。 これはつまり 「1台のオフラインPCでバージョン管理を取り入れた 個人開発が出来るようになる」 ということだ 16 これさえ分かれば、
どこでも効率的な 個人開発ができるぜ!
ローカルリポジトリを操る ~個人開発の森を開拓~ ② 方針 Git Bash (Macはターミナル) (CUI) を使う方法と GitHub
Desktop (GUI) を使う方法 同時に紹介していきます。どちらでやるかはお好みで。 初心者向けはGitHub Desktopを使う方。 もちろん好みで他のGUIツールを使用してよい。 17
ローカルリポジトリを操る ~個人開発の森を開拓~ ③ 開発プロジェクトのフォルダを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
ローカルリポジトリを操る ~個人開発の森を開拓~ ③ 開発プロジェクトのフォルダを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に提供...」
ローカルリポジトリを操る ~個人開発の森を開拓~ ③ 1. アプリを起動し、「Create a New Repository on your
hard drive...」 2. 「Name」(リポジトリ名)を入力、「Description」(説明文)は任意 3. 「Local path」でリポジトリを作る場所を指定 20 GitHub Desktop
ローカルリポジトリを操る ~個人開発の森を開拓~ ③ 4.「Initialize this repository with a README」にチェックを入れると README.mdが入った状態のリポジトリができる
5.「Git ignore」ではリポジトリに含めたくないファイルの種類を扱うアプリケー ションに応じて自動で選別して設定してくれる(超便利) 例えば「Unity」を選べば、トラッキングする必要のないファイルを自動でignore してくれる(.gitignoreが作成される) 21 GitHub Desktop
先に作ったローカルリポジトリをリモートと連携 ① この時空のフォルダから初めてリポジトリ化する(git init しておらず .git の隠しファイルがない)場合は注意書きが出る。 「create a repository」をクリックすればリポジトリにしてくれる(git
init と同じことをしてくれる) 22 GitHub Desktop
ローカルリポジトリを操る ~個人開発の森を開拓~ ④ Gitリポジトリ化されたか確認してみる • .git という隠しフォルダができていれば成功! • この .git
フォルダにバージョン管理に関する情報がすべて入っているので、絶 対に消してはいけない • .git の存在を確認できたら、隠しフォルダを再度非表示にすれば誤って消して しまうのを防げる 23
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑤ フォルダに適当なファイルを追加してみる 1. エクスプローラ(MacならFinder)で「SampleProject」フォルダを開き、 「新規作成」から「テキストドキュメント」を作成してみる。 ファイル名は任意。本講座では以降「sample.txt」とする。 2. sample.txt
に何か書いてみて保存する 3. Git Bash に戻り、 $ git status と入力するとフォルダ(ディレクトリ)の変更点が表示される 24 Git Bash
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑤ 1. 左のサイドバーに変更されたファイルが並び、 中央に変更内容が表示される 25 text.txt に一行 「Add
Change」と加 えた GitHub Desktop
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑥ ディレクトリの変更をステージ環境にあげる(add) 1. $ git add -A で変更内容をすべてステージ環境にあげる。
ステージ環境とは 「gitのローカルリポジトリに上げる準備が整った環境」 のことである 26 作業をする (ディレクトリの内容を変更) ステージ ローカル リポジトリ git add 「やっぱステージか ら外す」もできる git reset ここにあるものを 今回の変更点とし てコミットするよ git commit
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑦ ステージ環境にあがった変更をリポジトリに保存する (commit) 1. $ git commit -m
“コミットメッセージ” でステージ環境にあげた変更を ローカルリポジトリに保存できる。 この時 -m “コミットメッセージ(任意)” オプションを付けることでコミットの タイトルをつけることができる。 2. 今回は初めてのコミットなので $git commit -m “FirstCommit” とするとそれっぽくなる 27 Git Bash
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑦ 1. 左下のテキストボックスにコミットタイトルとメッセージを入力して 「Commit to master」を押すだけ! 2. Historyタブを見ると、今のコミットが追加されている。
28 GitHub Desktop
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑧ バージョン管理のための基本的な一連の流れを習得した! 29
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑨ もう一度一連の流れをやってみよう 1. バリバリ開発する 2. Git Bash (Macならターミナル)を起動し、
作業したディレクトリ(フォルダ)に入る $ cd 3. 変更をステージ環境にあげる $ git add -A 4. ステージ環境にあげた変更をローカルリポジトリにコミットする $ git commit -m “任意のコミットメッセージ” 5. 大勝利。案外簡単でしょ。 30
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑨ もう一度一連の流れをやってみよう 1. バリバリ開発する 2. GitHub Desktopを開く 31
③ コミットタイトルと コミットメッセージを書く ④ コミット (git commit) GitHub Desktop
ちょっと一休み 次は「ブランチ」を自由に操ってみよう 32
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑩ さて、こういうことがあるだろう • 今のプロジェクトの状態をベースに、複数の追加機能の実装をしたい • (チーム開発の話が少し入るが) バグ修正や機能追加を同時並行で進めて、後でそれらの成果を統合したい 33
画像:サルでもわかるGit入門
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑪ ブランチ(branch) 並行して行われる複数の機能追加やバージョン管理を支援するGitの機能 34
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑫-1 ブランチを切る 1. いま存在するブランチを確認してみよう $ git branch で確認できる
2. 新しいブランチを作る $ git branch 新しいブランチ名 (本スライドではdevelopにする) 3. $ git branch で確認すると、新しくブランチができている。 35 Git Bash
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑫-2 1. $ git checkout 新しいブランチ名 で、新しく作ったブランチに潜れる。 2.
パスの横の(master)の表示が(新しいブランチ名)になったのが確認できる はず 36 【応用】 $ git checkout -b 新しいブランチ名 で、新しいブランチの作成と チェックアウトを一度に行える Git Bash
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑫ ブランチを切る 1. メニューの「Branch」>「New branch...」 (この時「Current branch」が正しいかをチェック) 2.
「Name」に新しいブランチ名を入力し、「Create branch」 3. 新しく作ったブランチに自動的にCheckout(切り替え)している 37 GitHub Desktop
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑬ 新しいブランチでsample.txtの内容を変更してみる 1. sample.txtを編集・保存 2. 一連の流れをやる a. $
git add -A b. $ git commit -m “change sample.txt” 3. 新しいブランチ(develop)に新規のコミットが追加された 38 Git Bash
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑬ 新しいブランチでsample.txtの内容を変更してみる 1. sample.txtを編集・保存 2. GitHub Desktopを開く 39
③ コミットメッセージを書く ④ コミット (git commit) GitHub Desktop
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑭ ブランチを切り替える(checkout) 1. 今は「新しいブランチ(develop)」にいる 2. masterブランチに戻ってみよう $ git
checkout master 3. sample.txtを見てみよう 4. 編集内容がもとに戻っている、、、 5. 成功です。 40 ブランチ切り替え(checkout) develop master
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑭ GitHub Desktopでも簡単にcheckout できる 1. 「Current branch」タブをクリック 2.
移りたい(Checkoutしたい)ブランチをダブルクリックするだけ 41 GitHub Desktop
ローカルリポジトリを操る ~個人開発の森を開拓~ ⑮ できるようになったこと • コミット(commit) プロジェクトフォルダ内の変更内容にコメントを付けて管理できるようになった! • ブランチを新しく作る 現在の状態から新しいブランチを作成することができるようになった!
• ブランチを切り替える 今いるブランチから他のブランチに切り替えることができるようになった! 42
基本編 1. 必要なツールの導入と環境構築 2. ローカルリポジトリを操る ~個人開発の森を開拓~ 3. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ①-1 SSHキーを取得する 特にGitLFSを使用する際には必須 1. WindowsはGit Bash、Macはターミナルを開く 2. $
ssh-keygen -t rsa と入力し、SSHキーを生成 3. 生成される場所を聞かれるのでそのまま進める 4. パスフレーズを要求されるので好きなパスフレーズを 二度入力。リモートリポジトリとのやり取りの際に毎回聞かれるのが面倒 なら空欄でもよい。 44
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ①-2 うまくいっていればユーザーフォルダ直下の「.ssh」フォルダに、秘密鍵 (id_rsa)と公開鍵(id_rsa.pub)のペアが生成されているはず。 45
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ② Githubのアカウントを作成する 今回、リモートリポジトリの作成にGithubというサービスを使う。 Githubのアカウントを持っていない場合は公式サイトからユーザー登録し よう。 https://github.com/ Email認証(Verify email
address)も済ませてしまおう 46
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ③-1 GithubにSSHキーを登録する 1. 先ほど作成した id_rsa.pub をエディタやメモ帳で開き、中の文字列をコ ピーする ssh-rsa…
となっているはず 2. GitHubのページの右上端にあるアイコンをクリックして、アカウントメ ニューの中にある「Settings」を開く 47
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ③-2 1. 左側のメニューから「SSH and GPG keys」タブを選択 2. 「New
SSH key」をクリック 3. Title:分かりやすいキー名前(任意) 例)MyNotePC Key:先ほどコピーしたid_rsa.pubの文字列を貼り付け 1. 入力したら「Add SSH key」 48
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ④-1 Githubでリポジトリを作成する 1. トップページの「New repository」をクリック 2. Repository name
にリポジトリの名前(任意)を入力 3. 無料版でパブリックリポジトリとプライベートリポジトリの両方が使え る 4. Initialize this repository with a README にチェックを入れて README.md を自動生成してもらう 5. Create repository をクリック 49
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ④-2 50
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ④-3 今作ったのはリモートリポジトリ 51 リモート リポジトリ Bくんの ローカル リポジトリ
Aさんの ローカル リポジトリ オフライン オンライン まだない まだない
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑤-1 リポジトリをローカルにクローンする(clone) 1. Githubで作成したリポジトリを選択し、 「Clone or download」をクリック 2.
Clone with SSH (HTTPになっている場合は Use SSHを選択)で、 文字列をコピーする 52
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑤-2 1. Git Bash(Macはターミナル)を開き、リポジトリを置きたい場所に 移動する 例)$ cd ~/Documents
2. $ git clone コピーした文字列 と入力 3. ローカルにリポジトリがクローンされた 53 リモート リポジトリ Bくんの ローカル リポジトリ 自分の ローカル リポジトリ オフライン オンライン clone まだない Git Bash
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑤ 1. 「File」>「Clone repository...」 2. 自分のGitHubアカウントにあるリモートリポジトリが一覧表示されるので選択。 自分の以外のリポジトリをクローンする場合は「URL」でリポジトリのクローン URLを入力する
3. 「Local path」で リポジトリの保存先 を指定 4. 「Clone」をクリック 54 GitHub Desktop
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑥ これで見事ローカルリポジトリとリモートリポジトリが紐づけられ、いつで も相互にやり取りができる状態になった 55 リモート リポジトリ Aさんの ローカル
リポジトリ オフライン オンライン
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑦ あの日を思い出し、もう一度ローカルリポジトリに 変更をコミットしてみよう 1. バリバリ開発する 2. Git Bash
(Macならターミナル)を起動し、 作業したディレクトリに入る $ cd 3. 変更をステージ環境にあげる $ git add -A 4. ステージ環境にあげた変更をローカルリポジトリにコミットする $ git commit -m “任意のコミットメッセージ” 56 Git Bash
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑦ 新しいブランチでsample.txtの内容を変更してみる 1. バリバリ開発する 2. GitHub Desktopを開く 57
③ コミットメッセージを書く ④ コミット (git commit) GitHub Desktop
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑧ ローカルリポジトリの変更を リモートリポジトリに反映する(push) 1. Git Bash (Macならターミナル)で $
git status と入力し、現在のディレクトリに何も変更点がないことを 確認する 2. ローカルのコミットをプッシュする $ git push 3. ここで多くの場合 「git branch --set-upstream-to … をやれ」みたいなエラーが出るかも しれない。 コピペしてEnterし、再度 $ git push する 58 Git Bash
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑧ ローカルリポジトリの変更をリモートリポジトリに反映する(push) 1. 変更がすべてcommitされていること(No local changes)を確認し、 「Publish repository」
59 GitHub Desktop
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑨ ローカルリポジトリの変更をリモートリポジトリに反映できた! これがpushするということ。 60 リモート リポジトリ Aさんの ローカル
リポジトリ オフライン オンライン 最新の変更 最新の変更 が反映!
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑩-1 Aさんの作業をBくんのローカルに反映したい 61 リモート リポジトリ Aさんの ローカル リポジトリ
オフライン オンライン Bくんの ローカル リポジトリ 差分なし Aさんの最新の作業分だけ差がある
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑩-2 Bくんのローカルにリポジトリが存在しない場合(Bくんがチーム開発に参加して一番最初) 1. Bくんは $ git clone をする
2. Bくんのローカルリポジトリは、cloneした時点でのリモートリポジトリの最新状態と同じ になるため、プルは不要 62 リモート リポジトリ Aさんの ローカル リポジトリ オフライン オンライン Bくんの ローカル リポジトリ clone まるごと クローン!
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑩-3 Bくんがローカルにすでにリポジトリをクローンしている場合 • Bくんは $ git pull をすればいいだけ
63 リモート リポジトリ Aさんの ローカル リポジトリ オフライン オンライン Bくんの ローカル リポジトリ pull
しかしここで チーム開発の落とし穴が 64
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑪-1 AさんとBくんが同時に異なる作業をしていた場合、 リモートにあるAさんの変更とBくんのローカルの変更が競合する。 65 リモート リポジトリ Aさんの ローカル
リポジトリ オフライン オンライン Bくんの ローカル リポジトリ pull 違う変更がかぶるから プル出来ないよ。 Aさんの コミット Bくんの コミット Aさんの コミット
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑪-2 AさんとBくんが同時に異なる作業をしていた場合、 リモートにあるAさんの変更とBくんのローカルの変更が競合する。 66 リモート リポジトリ Aさんの ローカル
リポジトリ オフライン オンライン Bくんの ローカル リポジトリ push Bくんからプッシュも 出来ないよ... Aさんの コミット Bくんの コミット Aさんの コミット
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-1 競合を避けるために... 1. ブランチを切って作業し 2. 2つの異なるブランチの差分を比較してマージ (統合)する チーム開発の肝となるルールと仕組み
67
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-1 競合を避けるために... 1. ブランチを切って作業し 2. 2つの異なるブランチの差分を比較してマージ (統合)する チーム開発の肝となるルールと仕組み
68 チームメンバーが 守るべきルール Gitに搭載された 便利な仕組み
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-3 ブランチを切って作業をすると... それぞれがリモートにpushしても競合しない! 69 リモート リポジトリ Bくんの ローカル
リポジトリ Aさんの ローカル リポジトリ オフライン オンライン Aさんの作業 ブランチ Bくんの作業 ブランチ
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑫-3 2つの異なるブランチの差分を比較してマージ(merge) 70 リモート リポジトリ Bくんの ローカル リポジトリ
Aさんの ローカル リポジトリ オフライン オンライン Aさんの作業 ブランチ Bくんの作業 ブランチ 差分を比較して 問題なかったので マージ!
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑬ 差分を比較して競合が起こるのはどういうときか? • 複数人が同じファイルに別々の変更を加えていた時 • 誰かがフォルダ階層構造をガラリと変えてしまっていた時 など、ある一つのファイルについての変更が複数あった場合 71
リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ ⑬ 競合が起こらないようにするには? 72 誰の作業ブランチでもない developブランチを主体とする ことで競合を防ぐ プルリクエストについては後述 リモート上で差分を比較し
修正・マージできる超便利機能 【競合を避けるためのルールの例】 • 必ずdevelopブランチからブランチを切り、自分の作業をする。 • 他人のブランチとのマージは行わず、必ずdevelopブランチとのマージのみにする。 その際必ずプルリクエストを出し、管理者の承認を待つ。 チーム内でGit利用のルールを明確にし、正しく守ること
基本編、終了 Gitの大まかな仕組みと、個人・チームでの基本的な バージョン管理の方法を習得した! 73
基本編 1. 必要なツールの導入と環境構築 2. ローカルリポジトリを操る ~個人開発の森を開拓~ 3. リモートリポジトリとやり取りする ~チーム開発の海に飛び込む~ 応用編
1. 先に作ったローカルリポジトリをリモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4. 「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる Gitを実際に使ってみよう! ~目次~ 74
応用編 75 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.
「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる
先に作ったローカルリポジトリをリモートと連携 ① 先にローカルリポジトリを作ってバージョン管理を進めており、途中から リモートと連携したくなった時 例)・個人開発で進めていたものをチーム開発に切り替えたい ・ローカルで開発しているものをバックアップとしてリモートにあげておきたい 76 リモート リポジトリ Bくんの
ローカル リポジトリ Aさんの ローカル リポジトリ オフライン オンライン まだない まだない ある 連携 させたい
先に作ったローカルリポジトリをリモートと連携 ②-1 Githubで空のリポジトリを作成する 1. トップページの「New repository」をクリック 2. Repository name にリポジトリの名前(任意)を入力
3. パブリックリポジトリかプライベートリポジトリかは 任意 4. Initialize this repository with a README にチェックを入れない。 (リポジトリが空じゃなくなるから) 5. Create repository をクリック 77
先に作ったローカルリポジトリをリモートと連携 ②-2 リモートに空のリポジトリをつくる(READMEファイルを入れない!) 78
先に作ったローカルリポジトリをリモートと連携 ③-1 ちゃんと空だと、リポジトリのページのTopがこんな感じになる 79
先に作ったローカルリポジトリをリモートと連携 ③-2 今こういう状態 次にローカルリポジトリをリモートにコピーして連携させる 80 リモート リポジトリ Bくんの ローカル リポジトリ
Aさんの ローカル リポジトリ オフライン オンライン ある まだない ある まだ連携 していない (二つのリポジトリは別物)
先に作ったローカルリポジトリをリモートと連携 ④ (開発進行中の)ローカルリポジトリに戻ろう $ git push をしてみても 「No configured push
destination.(プッシュ先が設定されていませ ん)」と言われる。 それはそう。 81 Git Bash
先に作ったローカルリポジトリをリモートと連携 ⑤-1 その下に出てきた指示に従う $ git remote add <name> <url> <name>
は何でもいいが、Githubに作った空のリポジトリと同じ名前にし たほうが分かりやすい <url>はGithubのページから作った空のリポジトリの SSHパスをコピーしてくる 82 Git Bash
先に作ったローカルリポジトリをリモートと連携 ⑤-2 <url> に入れるリモートリポジトリのSSHのパスをコピー (sshキーが通ってる前提。42ページ当たり参照) 83
こんな感じ $ git remote add <name> <url> <name> なんでもよい(Githubに作った空のリポジトリと同じ名前にしたほうが分 かりやすい)
<url> Githubのページから作った空のリポジトリのSSHパス これでリモートリポジトリが登録された 先に作ったローカルリポジトリをリモートと連携 ⑤-3 84 Git Bash
$ git push <name> をする まだ成功はしないが、 $ git push --set-upstream
… と見たことのあるメッセージが。 「今pushしようとしているブランチがリモートに登録されていいないから しろ」ということ 先に作ったローカルリポジトリをリモートと連携 ⑤-4 85 Git Bash
GitBashさんのいう通りにしてみると... プッシュできた!! 先に作ったローカルリポジトリをリモートと連携 ⑤-5 86 Git Bash
先に作ったローカルリポジトリをリモートと連携 ⑤-6 ブラウザでGithubのリポジトリのページを読み込みなおしてみると... プッシュできてる!!! 87
先に作ったローカルリポジトリをリモートと連携 ① 1. 「File」>「Add local repository...」 2. リモートと連携したいフォルダのパスを入力(選択) この時フォルダがリポジトリになっていない(git init
しておらず .gitの隠し ファイルがない)場合は注意書きが出る。 「create a repository」をクリックすればリポジトリにしてくれる (git init と同じことをしてくれる) 88 GitHub Desktop
先に作ったローカルリポジトリをリモートと連携 ② リポジトリの作成は前やったことと同じ 1. 「Name」(リポジトリ名)を入力、「Description」(説明文)は任意 2. 「Local path」でリポジトリを作る場所を指定 3. 「Initialize
this repository with a README」にチェックを入れると README.mdが入った状態のリポジトリができる 4. 「Git ignore」ではリポジトリに含めたくないファイルの種類を扱う アプリケーションに応じて自動で選別して設定してくれる(超便利) 次はこの「Git ignore」の話 89 GitHub Desktop
応用編 90 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.
「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる
バージョン管理不要なファイルをignoreする ① Git ignoreとは... 無視する(Gitのトラッキングの対象外とする)ファイル やディレクトリを 指定できる 91
バージョン管理不要なファイルをignoreする ② Git ignoreとは... 無視する(Gitのトラッキングの対象外とする)ファイル やディレクトリを 指定できる 【例えばUnity開発の場合】 開発内容の変更に関わるのは ・Assetsフォルダ
・ProjectSettingsフォルダ ・Packagesフォルダだけで、 LibraryフォルダやTempフォルダはUnityのバージョンや利用者の環境ごとに生成される 処理データなので、Gitリポジトリに含めてチームメンバーと共有する必要はない。 むしろ共有してそれぞれの環境でプロジェクトを開くと不具合を起こすことがある。 92
バージョン管理不要なファイルをignoreする ③ Git ignoreの使い方 .gitignore ファイルがリポジトリに格納されていればよい .gitignore ファイルに無視したいファイルを指定する 93
バージョン管理不要なファイルをignoreする ④ .gitignore の書き方 詳しい書き方についての説明は省きます。 Qiitaの記事などを各自参照してください。 [Git] .gitignoreの仕様詳解 - Qiita
94
バージョン管理不要なファイルをignoreする ⑤ .gitignore の書き方 例えばUnity開発の場合 → (自分で0から書いてもいいけど...) だいたいネットにあるので、コピペして使うのが無難。 あとはGitHub Desktopでも出てくるGit
ignoreライブラリから持ってくる のが吉。 A collection of useful .gitignore templates 95
応用編 96 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.
「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる
Git LFS ①-1 Git LFSとは? Git Large File Storage の略で、大きいサイズのバイナリファイル
・jpg,pngなどの画像ファイル ・mp3,wavなどの音声ファイル ・avi,mp4などの動画ファイルなど をバージョン管理するための仕組み 97
Git LFS ①-2 Git LFSとは? GitHubのリモートリポジトリは100MBまでしか一度にプッシュできない 100MB以上のファイルを扱う際はGit LFSの出番! 98
Git LFS ② Git LFSの仕組みざっくりと 99 リモート リポジトリ Bくんの ローカル
リポジトリ Aさんの ローカル リポジトリ オフライン オンライン バイナリファイルそのものは LFSサーバーに保存され、 保存場所のURL(文字列)が リモートリポジトリに保存される プルした際はバイナリの保存場所 URLを参照してLFSサーバーから 取ってくる LFS サーバー バイナリファイルの 保存場所情報 プッシュ (push) プル (pull)
GitLFS ③-1 Git LFSの使い方 • Git Bash で $ git
lfs install をする 最近はGit Bashインストール時点でLFSを自動で導入してくれているっぽい • $ git lfs track "*.<指定したい拡張子>" で登録していく (例)$ git lfs track "*.jpg" あるいは .gitattributes ファイルを作り手動でトラック対象を設定する • $ git lfs track でトラック対象の確認 100
GitLFS ③-2 .gitattributes が入っている様子。もちろん.gitignoreと共存できる 101
GitLFS ④ ただGit LFS、エラーや分かりづらい挙動が多い... (個人の見解) エラーが起こるときの例 • 100MB以内のためリポジトリにそのままプッシュできていたファイルを途 中からLFSのトラッキング対象にするとき •
GitLFSのパッケージが変なところにある 例)gitコマンドが/usr/binにいるにもかかわらず、git-lfsが/usr/local/binにイ ンストールされている • LFSストレージや転送量の上限を超えた場合 例えばGitHubの無料枠だとストレージの上限が1GB、 転送量上限が1GB/月 102
応用編 103 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.
「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を使ってみる
「プルリクエスト」で安全なブランチ合流 ① プルリクエストとは? チーム開発において競合が起こらないようにするために、 レビュワー(管理者)に自分の作業ブランチを他のブランチに マージしていいか申請する機能。 「プル」リクエストというよりは「マージ」リクエストといった感じ。 リモートリポジトリでの話で、Git言語自身の機能ではなくGithubや Bitbucketなどのリポジトリサービスが提供する便利機能。 104
「プルリクエスト」で安全なブランチ合流 ②-1 「Pull requests」タブから「New pull request」を選択 105
「プルリクエスト」で安全なブランチ合流 ②-2 マージしたいブランチを選択し、「Create pull request」 106
「プルリクエスト」で安全なブランチ合流 ②-3 レビュワーに伝わるようプルリクエストタイトルと内容を記入し、 「Create pull request」 107
応用編 108 1. 先に作ったローカルリポジトリを リモートと連携 2. バージョン管理不要なファイルをignoreする 3. GitLFS 4.
「プルリクエスト」で安全なブランチ合流 5. チーム開発の課題管理機能「Issue」を 使ってみる
チーム開発の課題管理機能「Issue」を使ってみる ① Issueとは? チーム開発における課題管理機能。 Trelloのカードや紙ベースで課題管理をすることがあるが、 GithubのIssue機能を使えばブランチやPull Request、変更履歴をIssueと 紐づけて管理することが出来る。 つまりチーム開発における情報が、 「複数サービスに分散せずGithubだけに一元化されて分かりやすくなる」
というメリットがある。 109
チーム開発の課題管理機能「Issue」を使ってみる ②-1 新しいIssueを作ってみよう リモートリポジトリのトップページ 「Issues」タブ→「New Issue」 110
チーム開発の課題管理機能「Issue」を使ってみる ②-2 Issueのタイトルや提案内容を記入する 依頼相手に分かりやすいように! 111 Issueを割り当てるメンバーを設定 Issueのタイトル 提案内容の説明
チーム開発の課題管理機能「Issue」を使ってみる ③-1 プロジェクトのスケジュールを管理する 「マイルストーン」とIssueを紐づけたり... 112 3月15日までのMilestoneに Issueが一つ紐づけられている
チーム開発の課題管理機能「Issue」を使ってみる ③-2 課題の種類に応じて「ラベル」をつけられたり... (オリジナルのラベルも作成可能) 113 バグ修正してくれ~~ ◦◦の新機能実装オナシャス この実装もっと詳しく説明頼む
参考文献 Git の基礎勉強 〜Git によるバージョン管理を使う〜 今日からはじめるGitHub 〜 初心者がGitをインストールして、 プルリクできるようになるまでを解説 サルでもわかるGit入門
Git-flowって何? Gitチートシート - Qiita Issueのテンプレートを作る話 GitHub の Issue Template を複数設定して使い分ける 114
0から始める Git講座 2022 イマクリエイト株式会社 松迫翔悟 115 終