前回、バージョン管理とは何かを説明しました。
今回はGitの使い方についてお話しさせていただこうと思います。
基本的な使い方
前回お話ししたように、Gitには共有リポジトリとローカルリポジトリという2つの保管場所があります。
その2つの保管場所に対して下記の操作を行います。
コミット・・・ローカルリポジトリに作成したファイルを保存すること
プッシュ・・・ローカルリポジトリから共有リポジトリにファイルを保存すること
プル・・・共有リポジトリからローカルリポジトリにファイルをダウンロードすること
これらの操作を行いリポジトリに履歴を登録していくことになります。
実際に操作を行うと下記のようになります。
手順
- 新しいリポジトリをローカルに作成
- ファイルを作成や編集
- ローカルリポジトリにコミット
- リモートリポジトリにプッシュ
ファイルを編集するたびに上記作業を繰り返すことになります。(※1の作業は最初の一回だけで次回以降行う必要はありません)
また、他のユーザーが作成したファイルを編集する場合は、2の前にプルを行います。
これがGitの基本的な使い方になります。
ただ上記の基本操作だけでは問題が発生することがよくあります。
問題点
例えば、Aさん、Bさんが同時期に同じファイルに変更を行っているとします。
最初にAさんの作業が終わってプッシュ、次にBさんが作業を終わってプッシュすると「同じファイルに変更があるのでマージできません」とエラーになってしまいます。
これは、Bさんがプッシュした際、Aさんの変更が入っていないのでファイルを取り込めないとシステムが判断したことによるものです。
正常な操作としては、BさんはAさんの変更をプルして、自分のローカルリポジトリに取り込んだ上で変更を加えてプッシュしないとなりません。
ただ毎回他の人の変更を把握しないとだめなのでこれでは効率がよくありません。
この問題を解決する手段として、Gitではブランチを用います。
ブランチとは
自分のローカルリポジトリに複数の保管場所を用意するものです。
仕組みとしては、特定のブランチをコピーして、別の保管場所を作成するようにできております。こうすることで他の人の変更を気にせず自由に変更することが可能になります。
補足ですが、Gitの基本となるブランチはmasterブランチといいます。実は、最初にご説明した基本的な使い方ではこのブランチだけで作業をしていたことと同じ意味をもちます。
実際のブランチの作成方法としては下記手順になります。
手順
- masterブランチをプル
- masterブランチをベースに別ブランチを作成(仮に、testブランチとする)
- testブランチに切り替える(チェックアウトする)
- ファイルを作成や編集
- ローカルリポジトリにコミット
- リモートリポジトリにプッシュ
3まで行うと、以降は基本的な使い方と同じ操作になります。
ただ、このままではtestブランチに変更が反映されただけで、masterブランチに自分の変更が反映されません。そこでプルリクエストを行います。
プルリクエストとは
特定のブランチを別のブランチに取り込むよう指示を出すことです。
※正確にいうと、プルリクエストはGitの機能ではないです。GitHubなどの共有WEBサービスでの操作になります。
今回のケースですと、Bさんがtestブランチをプッシュした後、testブランチからmasterブランチに対してプルリクエストを行います。
そして、そのプルリクエストをマージすることでtestブランチの修正がmasterブランチに反映されることになります。
このようにすると同じファイルを修正していてもほとんど競合エラーが発生せずマージできるはずです。
次回はこのブランチを使って実際の開発手法についてお話ししたいと思います。