mdr141
11/3/2018 - 5:21 AM

Git基礎

・Gitとは ・Gitの使い方 ・Git用語めも ・ブランチとは ・プルとは

Git:
・バージョン管理システム
・変更ごとのバックアップを取れる
・好きな時点に戻せる
・各メンバーの修正を合体できる

GitHub:無料は公開リポジトリ無制限、有料は非公開リポジトリも無制限
https://github.com/

BitBucket:無料は5ユーザまでなら非公開リポジトリ無制限
https://bitbucket.org/
・Gitのホスティングサービス
・Gitで管理しているファイルのバックアップ先として使える
・ファイル編集しつつ、複数人でコミュニケーション取る
・ただのファイル置き場、ではなくチームで意見交換もできる場
・ソーシャルコーディングの場

SourceTree:
https://ja.atlassian.com/software/sourcetree
日本語対応、無料利用、GitHubやBitBucketと連携OK
◆基本的な使い方
・以下を繰り返すことで、作業履歴を記録していく。
作業する
↓
ステージする(git add)
↓
コミットする(git commit)

◆バージョン管理をしなくてもいいファイルを無視する
・バージョン管理をしなくてもいいファイル:OSの自動生成ファイル、キャッシュ、容量でかすぎファイル
・「.gitignore」ファイルを以下のように設定し、コミットする
◇書き方集:
https://github.com/github/gitignore
◇書き方例:
・コメントアウト:# コメントアウト
・特定のファイルを無視:Thumbs.db
・特定の拡張子を無視:*.pdf
・例外として特定のファイルを無視しない:!test.pdf
・特定のディレクトリ以下を無視:test_ishii/
・ルートディレクトリ直下を無視:/test_log/
◇最低限の設定?
# General
.DS_Store
Thumbs.db
※すでにリポジトリにあるファイルを無視したい場合
参考:https://qiita.com/yuuAn/items/b1d1df2e810fd6b92574
◆◆◆用語まとめ◆◆◆
◇リポジトリ:貯蔵庫。過去の状態を記録してくれる。
◇ローカルリポジトリ:自分のPC内のリポジトリ。個人用、練習用にも。
◇リモートリポジトリ:みんなで共有する(公開される)リポジトリ。
◇コミットメッセージ:いつ?だれが?変更したのかはコミットで記録されるので、なぜ?変更したのかを記録するためのコメント。
◇プッシュ:ローカルリポジトリで編集した内容を、リモートリポジトリに反映させる
◇チェックアウト:今作業しているコミットから、戻りたいor進みたいコミットへ、作業環境を移動すること。

◇フォーク:他の人が公開しているリモートリポジトリを自分のアカウントのリモートリポジトリにコピーすること。
◇クローン:リモートリポジトリをローカルにコピーすること。

◇masterブランチ:本流。本番用の最新ソースコードが保たれているようにする。
◇派生ブランチ:masterから分岐したブランチ。バグ修正などをここでして、あとでmasterにマージするとか。
◇マージ:あるブランチに、別のブランチの編集箇所を反映、統合させること。

◇コンフリクト:別々の人が、同じ行に異なる修正をした→マージした→コンフリクト発生

◇フェッチ:リモートリポジトリから最新の状態をリモート追跡リポジトリへ取得すること

◇スタッシュ:まだコミットしたくない作業を一時的に隠す
派生ブランチで作業途中なのに、割り込みで別ブランチの作業を頼まれた
↓
現在の作業中ブランチに未コミットがあると、別ブランチに移動できない
けど、まだ作業途中なので派生ブランチでコミットしたくない
↓
作業途中の内容を、スタッシュで一時退避させておく
↓
割り込みで頼まれた作業のブランチへ移動できるようになる

◆タグ:コミットの履歴上で重要なポイントに目印(タグ)をつけることで、後で復元したいときなどに探しやすくなる。
・アプリ開発時、リリースしたときバージョン番号のタグをつける(「v1.2.1」など)
・受託開発時、納品したとき日付のタグをつける(「2018-05-24」など)
・ウェブ開発時、リニューアルオープンしたときタグをつける(「2018-renewal」など)
◆◆◆ブランチについて◆◆◆
◆参考:GitHub Flow 6つのルール
[1]masterブランチは常に本番反映できる状態にしておく。
基本的にmasterブランチでは作業せず、各topicブランチで作業。

[2]新しい作業はtopicブランチで行う。topicブランチの名前は内容がわかりやすい名前。
新機能を追加したい、デザインを修正したい、など目的ごとにmasterブランチから派生ブランチ(topicブランチ)を生やす。
基本的には、生やした先のブランチで作業をする。
作業が終わり、masterブランチと統合させたくなったら、プルリクエストを送る。
このtopicブランチの名前は、パッと見で内容が想像できるものにする。
例:「add-facebook-button」「fix-login-css」

[3]ブランチを定期的にプッシュする
[4-1]フィードバックや助言が欲しくなったらプルリクエストを送る
[4-2]masterブランチにマージできる状態になったらプルリクエストを送る
[5]masterブランチへマージできるのは、他メンバーにレビューしてもらってOKが出たものだけ
[6]masterブランチへマージされたら、すぐリリースする
◆◆◆プルがしてること◆◆◆
◆プルがしてるのは「リモートブランチ=>ローカルブランチ」ではなく「リモートブランチ=>リモート追跡ブランチ=>ローカルブランチ」
つまり、「フェッチ」と「マージ」を合わせたことをやってる
・フェッチ:リモートブランチ=>リモート追跡ブランチ
・マージ:リモート追跡ブランチ=>ローカルブランチ

◇リモートリポジトリにあるもの
・リモートブランチ
◇ローカルリポジトリにあるもの
・リモート追跡ブランチ:リモートブランチをローカルにミラーリング(コピー)しただけ。読み取り専用。
・ローカルブランチ:普段コミットするブランチ

◆◆◆プルリクエストについて◆◆◆
◆フォーク&クローンで持ってきたリポジトリの変更点を取り込んで!というリクエスト

◆プルリクエスト〜マージまでの流れ(GitHub使用の場合)
[1]フォークする
[2]クローンする
[3]作業用ブランチを作る
[4]作業を終えたらコミットする
[5]自分のリモートリポジトリにプッシュする
[6]GitHubでプルリクエストを作る
[7-1]相手がコードレビューをしてくれる(はず)
[7-2]修正依頼があれば、修正する
[7-3]同じブランチにそのまま修正をコミット&プッシュする
[8]OKであればマージされる