よくわかりすぎるGitの使い方 with Github
対象
完成版_最新_comp_ver3_最終というファイル名になりがちの人
プログラマ
物書き, 卒論書いてる大学生
Gitとはなんぞや
https://gyazo.com/d83878f9ad6794dc149e3adc79bbc284
バージョンを管理するツール
バージョン(コミット)ごとに差分を記録して、戻したり、差分だけを取り込んだりできる
他にも便利な機能がある
こんなことがなくなる
バージョンごとにファイルを作らなくていい!
→変更ごとに全部記録されてるから保存する必要がない
どこでなにを変更したかわからん!
→変更ごとにメッセージ付きで記録できるのでひと目で分かる
こんなことができるようになる
複数人でファイルを作成!
→ブランチ機能を使って複数人で並行してファイルを編集→マージで変更点を結合できる!
こんなことがなくなる(開発者向け)
バージョンごとにファイルを保存する
→Gitを使えば全部記録されているのでいちいち保存する必要がない
変更がわからん....
→コミットメッセージで管理できる!
開発してるソースと現在の最新版を分けなきゃ。。。。
→ブランチ機能でワンクリックで切り替え可能!
こんなことができるようになる(開発者向け)
他人からフィードバックをもらいたい....
→GithubとGitを連携して使うことでissueでフィードバックがもらえる!
他人と一緒に開発したい!
→ブランチ機能やプルリクエスト機能を使って複数人で開発できる!
(他にもプルリクエスト機能で、不特定多数の人から改善してもらえる可能性も・・!?)
ソフトウェアを配布したい!
→Githubのリリース機能を使ってソフトウェアを配布できる!(しかも永久にファイルは残るので、うpろだとかの広告を見る必要ナシ!)
正直できること多すぎて紹介しきれない!!!
ので、放送内でいろいろ触れていきます
コミットって何?
変更を記録することで、変更のこともコミットと言います。
変更記録する→ 「コミットする」
変更→ 「コミット」
という。
コミットのイメージ
https://gyazo.com/ba615baf0ac51fc0a206a94d7b9be098
一本の直線(ブランチ)の上にコミットがあって、変更(コミット)が刻まれているイメージ
実際のコミット
https://gyazo.com/c4efc7d467be572212dd7a65db4d80180
↑実際のクリ森公式サイトのコミット履歴
変更ごとにコミットが刻まれているのがわかる
コミットの中身
https://gyazo.com/110692158d6ad75621cb05369bf1c8b6
コミットの中には何を変更したかが刻まれてる
なので、変更を戻したり取り消したり結合したりすることができる
ブランチってなんぞや
コミットが刻まれる枝?みたいなやつ
ブランチのイメージ
https://gyazo.com/34cb84b7750d803a79d741ffe9e1ba58
これです。
ブランチの使い方
安定版 master(とりあえず完成してるやつ)
編集中 develop(まだ作ってるやつ)
編集内容
安定版+編集中と編集内容の2+複数のブランチでやっていく
→Git Flowという進め方
(ちなみに今回の2+αは簡易版で、本当はあと3つほどブランチが登場する)
Git Flowのイメージ
https://gyazo.com/4805b50e302cfb91c31557a310fbd47b
こんな感じで枝分かれしていく
(ちなみにブランチは日本語で枝, 枝分かれしたものという意味)
実際のブランチ
https://gyazo.com/4931ab0ffc362ead5c2ce809a1002acf
2つのメインブランチと
https://gyazo.com/2b8bfbcea295d5ad66a84c0aebea3293
一つの作業ブランチが存在している
なぜブランチを分けるの?
新機能追加や更新でブランチを破壊しないためです。
あとは前のバージョンに戻したいとき。
ブランチを分ければ前のバージョンに戻すのもワンクリックでできます。
なぜ安定版ブランチと開発ブランチを分けるの?
安定版のブランチ(masterブランチ)には、基本的には完成しているものしか置いてはいけないため
(これは慣例なので、絶対においてはいけないわけではない)
置いてはいけない理由としては
Git Cloneしたときに未完成のソースがクローンされるから
完成したソースをダウンロードするのにわざわざコミットを遡る必要があるから
開発者以外
個人的に開発者以外はGit Flowを使う必要は無いんじゃないかなぁと思う(それか2ブランチ体制)
マージってなに?
マージとは
これを
https://gyazo.com/4805b50e302cfb91c31557a310fbd47b
こうすること
https://gyazo.com/4f979906031d6ceafb34ee10940fd37e
そしてこうなる
https://gyazo.com/a3728e0a32d6edf9bb90b98d6d3bd84f
つまりマージとは
ブランチを結合することです。
マージの種類
Create a merge commit(普通のマージ)
Rebase and merge(リベース)
Squash and merge
普通のマージ(Create a merge commit)
マージコミットを作るマージ方法。
マージコミットとは
https://gyazo.com/05e2478c49f29815ed3e996b139109df
これ。
マージされたという情報が入ってる
実際のマージコミット
https://gyazo.com/5c9f70b30ad57da8e03c057206c9e0cc
これがマージコミット
Chipsnet(ユーザー)のdevelopブランチからのプルリクエストをマージしたよ!
という意味。
マージコミットの利点
どこからマージしたかわかる
さっき紹介したように、マージ元が記録されるのでソースが追いやすいです。
マージコミットの欠点
コミットがごちゃごちゃになる
https://gyazo.com/4c8c4c55f527fd129a6ffab5e4c27ce6
多用するとこんなふうに、ほっとんどマージコミット!!みたいになっちゃう
リベースマージ
リベースするマージ
リベースとはなんぞや
https://gyazo.com/d5aba6fb87cc8edb54d7c53a039e329d
これが
こうなる
https://gyazo.com/23f29ce8377d2f958abcc07f8dbec42c
リベースマージのメリット・デメリット
メリット
かなりコミット履歴が見やすくなる
デメリット
場合によっては実行できない(競合が起きる)場合がある
競合を修正するのは結構めんどい
Squashマージとはなんぞや
コミットをまとめてマージするよ!
これが
https://gyazo.com/d5aba6fb87cc8edb54d7c53a039e329d
こうなる
https://gyazo.com/a5ae56e9b97d73abaf6f198715ba9fe5
どういうことや
Squashマージは、コミットをまとめてマージしてくれる。
→コミットをまとめたマージコミットを生成する
実際のSquashマージコミット
https://gyazo.com/94192bfbc965220a758e186faa307465
複数のコミットがCSS軽量化という一つのコミットにまとまっているのがわかる
Squashマージのメリット・デメリット
メリット
クソたくさんコミットしてもコミット履歴が荒れない
つまりめっちゃ細かくコミットする人にオススメ!
デメリット
コミットを束ねるのでコミットの意味がない
履歴が追えない
→どうせ振り返さない束ねても問題ないコミットで使おう!
マージまとめ
Create a merge commit(普通のマージ)
基本はこれを使う
マージコミットが生成される
Rebase and merge(リベース)
他のブランチの更新を取り込むときに使う
マージコミットナシでマージができる
競合する時がある
Squash and merge
コミットを束ねてマージされる
コミットが散らばらなくて綺麗に見える
履歴は追えない
Push
めっちゃ大切な要素
コミットをリモートに同期すること
リモート
自分のPCではないGitのサーバーのこと。
有名所だと...
Github
GitLab
GitBucket
Azure Repos
「Pushする」とは
https://gyazo.com/b8a78bf9c860dbbc87711515d3cba97f
ローカルリポジトリのコミットとかブランチとかの情報をリモートリポジトリと同期すること
Pull / Fetchするとは
https://gyazo.com/0b8cf82ef01abee8fdf36a2ae38d638c
要するにPushの逆。
リモートリポジトリとかのコミットやブランチとかをローカルリポジトリに同期する
PullとFetchの違い
Fetch
リモートから変更をとってくる
取ってくるだけでローカルは変更されない
Fetchしたデータをマージすることでローカルを変更できる
Pull
Fetch + マージがセットになったやつ
自動で変更を取得, ローカルを更新してくれる
Pull Requestとはなんぞや
Githubに投稿したデータは、誰でもダウンロードして編集することができて
ここ修正したよ!どうですか!よかったら貴方のプログラムに取り込んでね!っていうリクエストを送ることをプルリクエストと言う
Cloneとはなんぞや
ソースコードとブランチとコミットの情報をダウンロードコマンドのこと
実際にやってみる
Gitのインストール
GitKrakenのインストール
Githubの登録
Githubのリポジトリ作成
ローカルリポジトリの作成
実際にコミットしてみる
実際にPushしてみる
実際にPullしてみる
ブランチを作ってみる
プルリクエストしてみる