20190425 JJUG ナイトセミナー
いちばんやさしいGit入門2019/4/25 JJUG #jjug宇賀神 みずき しょぼちむ(@syobochim)#jjug
View Slide
よろしくお願いします!宇賀神 みずきしょぼちむ(@syobochim)『いちばんやさしいGit&GitHubの教本』 書きました!YouTube始めました! チャンネル登録お願いします#jjug
このセッションの目的新たにGitを学びたい方にGitの概念やGitコマンドを理解してもらう#jjug
もくじ1. バージョン管理とは?2. Gitの考え方3. Gitの操作4. Gitの勉強方法#jjug
バージョンとはそれぞれのファイルの状態=バージョンファイルの複数バージョンを保持すること=バージョン管理#jjug
バージョン管理がうまくいかないと…原始的なバージョン管理→バックアップを取り続ける• コピーに手間がかかる• ファイル名の一貫性が失われると崩壊する• うっかり上書きや削除をしてしまう本当の最新はどれ?!#jjug
バージョン管理ができるGitファイルの変更を「バージョン」として保存して 記録した地点へいつでも戻れる作業者が複数人いても 最新状態や履歴をわかりやすく保てる記録したバージョンにいつでも戻れる#jjug
ファイルの変更を記録 = コミット「いつ」「誰が」「どんな変更を」したか記録されていくコミットをどんどん保存していくコミット単位で行き来できる#jjug
コミットのタイミング意味を持ったまとまりや後から扱いやすい単位でコミットをしよう#jjug
コミットの保管場所 = リポジトリリポジトリは 「新規作成する」か 「既存のリポジトリをコピー(クローン)する」 方法がある「リポジトリ」にコミットを貯めていく#jjug
2種類のリポジトリ自分しか触らない 複数人で共有することが多い#jjug
2種類のリポジトリを使った共同作業ローカルリポジトリからリモートリポジトリへ反映したりリモートリポジトリからローカルリポジトリへ反映したりこれを繰り返してコミットを共有し、共同作業を進めていく#jjug
それぞれのリポジトリでの操作自分しか触らない 複数人で共有することが多いまずはローカルリポジトリ#jjug
ローカルリポジトリの3つの場所ワークツリー ステージングエリア Gitディレクトリ編集するコミットしたいファイルを登録するコミットする#jjug
ワークツリーステージングエリア Gitディレクトリコミットしたいファイルを登録するコミットする編集する変更するファイルを保持する場所「ワーキングツリー」 「作業ディレクトリ」とも呼ばれる#jjug
ステージングエリアワークツリー Gitディレクトリコミットするコミットしたいファイルを登録するコミットするファイルを 一時登録する場所編集済みのものから コミットしたい ファイルだけを抜き出せる →コミットの単位を 操作しやすくなる「インデックス」と呼ばれることもある#jjug
コミットしたいファイルを登録するGitディレクトリワークツリーコミットするコミットを格納する場所原則、コミットで記録した内容は 変更・削除されない#jjug
最低限覚えておきたいコマンド(前半)#jjug
ローカルリポジトリを作成する通常のディレクトリリモートリポジトリローカルリポジトリgit initgit clone新規作成既存をコピー#jjug
コミットまでの流れワークツリー ステージングエリア Gitディレクトリコミットしたいファイルを登録するgit add git commitコミットする#jjug
ステータスの確認git status現在のローカルリポジトリの状態を確認0OCSBODINBTUFS$IBOHFTUPCFDPNNJUFEʢதུʣɹɹOFXpMF(JU@.&.0NE全てコミット済み(中略)ファイルを編集(中略)ファイルを新規作成(中略)ステージングに登録#jjug
履歴の確認git logコミットの履歴を確認-p オプションをつけるとどんな変更をしたかも確認できる#jjugichiyasa
紹介したコマンド(前半)• git init• ローカルリポジトリの作成• git clone• リモートリポジトリからリポジトリをコピー• git add• コミットしたいファイルをステージングエリアへ登録• git commit• ステージングエリアの変更をコミットする• git status• ローカルリポジトリの状態確認• git log• コミット履歴の確認#jjug
それぞれのリポジトリでの操作自分しか触らない 複数人で共有することが多いローカルリポジトリここまで#jjug
それぞれのリポジトリでの操作自分しか触らない 複数人で共有することが多いお次はリモートリポジトリ#jjug
リモートリポジトリの役割コミットは任意のタイミングでリモートリポジトリに反映任意のタイミングでローカルリポジトリに反映#jjug
共同作業の難しさ来週リリースの機能がすでに入っている…?!#jjug
共同作業に役立つブランチ同͡リϙδトリͰ複数の作業を並行して進め、 任意の時点Ͱ反映Ͱきるブランチを統合すること=「マージ」masterブランチトピックブランチ#jjug
マージで発生する変更の衝突開催地:沖縄県開催地:東京都開催地:北海道マージできない!❌変更の衝突を「コンフリクト」や「競合」と呼びます。#jjug
コンフリクトを解決するコンフリクトが発生している時のgit status<<<<<<<<コンフリクトしている箇所の開始地点>>>>>>>>>コンフリクトしている箇所の終了地点========2つのブランチの境目1. ファイルを正しく変更して2. コンフリクトの印である記号を消して3. コミットする#jjug
最低限覚えておきたいコマンド(後半)#jjug
リモートリポジトリの役割任意のタイミングでローカルリポジトリに反映git pullgit pushコミットは任意のタイミングでリモートリポジトリに反映#jjug
ローカルリポジトリ→リモートリポジトリローカルリポジトリ リモートリポジトリgit push origin update-venueプッシュ先のリモートリポジトリの名前プッシュするブランチ名#jjug
リモートリポジトリ→ローカルリポジトリローカルリポジトリ リモートリポジトリgit pull origin masterプル先のリモートリポジトリの名前プルするブランチ名#jjug#jjug
ブランチの作成と移動git branch update-venue作成するブランチ名git checkout update-venue切り替え先のブランチ名ブランチを切り替えてから作業するupdate-venuemastergit merge master変更を取り込みたいブランチupdate-venuemastermasterブランチの最新情報を取り込むupdate-venuemaster#jjug
紹介したコマンド(後半)• git push• ローカルリポジトリからリモートリポジトリへ反映• git pull• リモートリポジトリからローカルリポジトリへ反映• git branch• ブランチの作成• git checkout• ブランチの切り替え• git merge• ブランチの統合#jjug
最低限覚えておきたいコマンド(まとめ)#jjug
実際に使ってみるのがいちばん!一人でも始められる! プログラミング以外でもバージョン管理は役に立つ!• 業務で開発しているプロジェクトのソースコード• 趣味で開発しているプロジェクトのソースコード• 勉強会メモ• 書籍の原稿などなど…#jjug
コマンドに慣れない…無理をせずGUIクライアントを試してみよう! 大切なのは、Gitで何ができるのかを理解して 自分はどこでどんな操作をしているのか意識すること!#jjug
おすすめ書籍詳しく、丁寧に、そしていちばんやさしく書いてある#jjug
書籍で紹介しているコマンドたちgit checkoutgit rmgit diffgit resetgit configgit remotegit fetch#jjug
最後にJJUGのセミナーがきっかけで 「いちばんやさしいGit&GitHubの教本」 を書くことになりました!JJUGのみなさまありがとうございます!書籍お持ちの方はAmazonレビューを 是非お願いします! (やさしくお願いします)#jjug
ありがとうございました!#jjug