酒と泪とRubyとRailsと

Ruby on Rails と Objective-C は酒の肴です!

チーム開発に必要なgit コマンドを神速で習得しよう!

すみません、タイトルは釣りです。書籍『入門git 』と『もっと早く知りたかった! Gitが鬼のようにわかるスライド厳選7選』、『Gitがこわくて触れられなかったけど、このスライドで理解出来るようになったよGitサイトまとめ』紹介のスライドを読んで、理解したことをまとめたいと思ってこの記事を書きました。今までは個人でしかgitを使ってなかったので、チーム開発に必要なgitコマンドを少しでも理解できるように頑張ります!


gitの基本的な開発スタイルについて


From イラストでわかる!git入門の入門

gitの基本的な開発スタイルは次の通りです。

(1) gitの開発ではローカルで使う個人リポジトリとチームで使う共有リポジトリを用いる
(2) 共有リポジトリに push すると個人リポジトリのこれまでのコミット内容を送れる
(3) pull すると共有リポジトリのコミット内容を個人リポジトリに取り込める

gitリポジトリを作成する

ローカルに個人リポジトリを新規作成する場合は、プロジェクト直下のフォルダでgit initを実行します。また、サーバ側にリポジトリを新規作成する場合は、git init --bareを実行します。

開発の基本的な流れ


From 一人でもはじめるGitでバージョン管理

gitを使った開発の基本的な流れは次の通りです。

(1) 共有リポジトリからpullして個人リポジトリを最新に
(2) 個人リポジトリでソースコードを変更
(3) ファイルの追加/削除/変更をgitのインデックスに追加するために git add
(4) 変更結果を git commit で個人リポジトリにコミット
(5) 個人リポジトリをpushして共有リポジトリに反映

ブランチ・マージ・リベースの意味

git のブランチや、marge / rebaseコマンドについてかなり丁寧に説明をしてくれています。また、マージの際のFast Forwardの説明もわかりやすいです。コレを読んでおくと陥りがちな失敗をうまく回避できそうです!

git の仕組みについて

ここまでいくつかのgitコマンドを紹介してきましたが、git内部でどんな動きをしているかについて紹介されているスライド『いつやるの?Git入門』を紹介します。これを読んでおくと、git内部の動きが色々納得できますよ!

gitの基本コマンドを理解できるサイト

gitのコマンドを例題を解きながら理解をすることができるサイト『Learn Git Branching』の紹介です。コマンドに対応して図が変化するなど、動きもあってわかりやすいです。

A successful Git branching modelについて


From バージョン管理のワークフロー

ブランチを活用してバージョン管理を行いながら開発をするための代表的なモデル『A successful Git branching model』は次の通りです。

* masterブランチ:安定してリリースが可能な状態を保つ
* developブランチ:最新の開発を反映する
* featureブランチ:新しい開発をするのに用いる
* releaseブランチ:リリース準備のために用いる
* hotfixブランチ:masterで致命的バグがあった場合に使用します。

featureブランチでの機能開発の流れは次の通りです。

1
2
3
4
5
6
git checkout -b feature-x.x.x develop #=> developからfeature-x.x.xブランチを作成して移動
(feature-x.x.xの実装)
git checkout develop #=> developブランチにスイッチ
git merge --no-ff feature-x.x.x #=> developとfeature-x.x.xをマージコミットを作ってマージ
git branch -d feature-x.x.x #=> マージされたfeature-x.x.xブランチを削除
git push origin develop #=> 共有リポジトリにdevelopをpush

releaseブランチでのリリース準備作業の流れは次の通りです。

1
2
3
4
5
6
7
8
git checkout -b release-x.x.x develop #=> developからrelease-x.x.xブランチを作成して移動
(リリースの準備作業)
git checkout master #=> masterブランチにスイッチ
git merge --no-ff release-x.x.x #=> masterとrelease-x.x.xをマージコミットを作ってマージ
git tag -a x.x.x #=> バージョン情報をタグに書く
git checkout develop #=> developブランチに移動
git merge --no-ff release-x.x.x #=> developとrelease-x.x.xをマージコミットを作ってマージ
git branch -d release-x.x.x #=> マージされたrelease-x.x.xを削除

hotfixブランチでのバグ修正作業の流れは次の通りです。

1
2
3
4
5
6
7
8
9
git checkout -b hotfix-x.x.x master #=> masterからrelease-x.x.xブランチを作成して移動
(バグ修正を実施)
git commit -m “Fix a bug” #=> バグ修正をコミット
git checkout master #=> masterブランチにスイッチ
git merge --no-ff hotfix-x.x.x #=> masterとhotfix-x.x.xをマージコミットを作ってマージ
git tag -a x.x.x #=> バージョン情報をタグに書く
git checkout develop #=> ブランチdevelopにスイッチ
git merge --no-ff hotfix-x.x.x #=> developとhotfix-x.x.xをマージコミットを作ってマージ
git branch -d hotfix-x.x.x #=> ブランチhotfix-x.x.xを削除

補足として、『A successful Git branching model』のコマンド入力を簡略化するためのツールとして、git-flowがあります。もしこのモデルを踏襲したい場合は是非活用ください。

逆引きGit

nulabさんが作成されている『逆引きGit』は書籍になったら大ヒットしそうなレベルでまとまっていてオススメです!

マージでconflictが発生した場合の対策

marge中に2つのブランチのどちらも変更されたファイルがあった場合は、conflictが発生する場合があります。『Gitでコンフリクトした時のための備忘録』にconflict(矛盾)が発生した場合によく使いそうなコマンドが整理されています!

また、p4margeというconflict時のツールもあります。『Gitのマージツールにp4mergeを使ってみた』にgitで利用するための手順がまとめラているのでよかったら試してみてください!

補足

pullとfetchの違い

pullコマンドでは自分のコードと他人のコードがマージされます。もしまずは取り込むだけにしたい場合は、fetchコマンドを実行します。fetch と pullの違いに簡潔な説明がありますので、こちらもオススメです!

ベアリポジトリ(git init –bare)について


From ベアリポジトリとノンベアリポジトリ:理論編〜GitでWordPressのテーマを管理


From いつやるの?Git入門

--bareは、ベアリポジトリを作成する場合につけます。ベアリポジトリとは、更新情報だけを持つリポジトリのことでサーバの共有リポジトリの場合につけます。

Special Thanks

Gitがこわくて触れられなかったけど、このスライドで理解出来るようになったよGitサイトまとめ

もっと早く知りたかった! Gitが鬼のようにわかるスライド厳選7選

押さえておきたい書籍

いかがだったでしょうか?
もし説明がわかりにくかったり、間違っている場所があればぜひ一言!

Comments