Git で最初におさえておきたい仕組みや基本知識を解説していきます。
最初にこれを見ておけば、全体の使い方のイメージが把握できます。
そもそも Git とは何か? という話はこちらに書きました。
リポジトリとは?
まずはリポジトリの話から。
リポジトリは、プログラムの変更履歴を保存する場所です。
Git でプログラムを管理する場合は、まずリポジトリを作成して、その中にプログラムの変更履歴を記録していくことになります。
ローカルリポジトリ・リモートリポジトリ
リポジトリには、ローカルリポジトリとリモートリポジトリの2種類があります。
ローカルリポジトリは、手元のパソコン内などにある各自が持っているリポジトリのことです。また、リモートリポジトリは、外部のサーバーなどにある複数人で共有して使うためのリポジトリのことです。
ふだん各自でプログラムを修正する場合には、ローカルリポジトリの中に変更履歴を保存していくことになります。そしてそれをリモートリポジトリに送信して保存しておくことができます。これを「push(プッシュ)する」と言います。
リモートリポジトリに保存された変更履歴は、他の人が自分のローカルリポジトリに持ってくることもできます。これを「pull(プル)する」と言います。
複数人で開発する場合は、各自のローカルリポジトリに変更履歴を保存していき、最終的にリモートリポジトリにみんなの変更が集められるというイメージになります。
プログラムをリモートリポジトリへ反映するまでの流れ
修正したプログラムをローカルリポジトリに保存し、それをリモートリポジトリへ反映させる流れを確認していきましょう。
おおまかに言うと、ワークツリー、インデックス、ローカルリポジトリ、リモートリポジトリという領域に順番に反映していく形になります。
もっと詳しく説明していくと、まず、Git で管理しているディレクトリ以下のファイルが置いてある領域は、「ワークツリー」と呼ばれます。ここにあるファイルを修正していきます。
次に git add
コマンドを使って修正したファイルを指定すると、「インデックス(ステージング)」という領域に反映されます。インデックスには「これからローカルリポジトリに変更履歴を登録したいファイル」を追加します。複数のファイルをまとめて追加することができます。
この状態で git commit
コマンドを実行すると、インデックスにあるファイルの変更内容が「ローカルリポジトリ」に反映されます。この作業を「コミットする」と言います。コミットを行うと、変更したユーザーの名前や変更日、変更したファイル、変更前と変更後のプログラムの差分が記録されます。
開発者が自分一人の場合は、ここまでの作業を繰り返し行う形でも問題ありません。複数人で変更を共有したい場合や、バックアップとして外部のリポジトリに変更履歴を保存しておきたい場合は、git push
コマンドを使って、ローカルリポジトリの内容をリモートリポジトリに反映させます。
まとめると、
- プログラムを修正 →
git add
→git commit
を繰り返しながら開発を進める - 必要があれば適宜
git push
を行う
という流れになります。
Git のそれぞれのコマンドについては、この後の講座で詳しく学んでいきます。
ブランチ
Git にはブランチという作業履歴を枝分かれさせるための機能があります。
変更をコミットすると、初期の状態では「master」という名前のブランチにコミットされます。
ここで新たに機能を追加したいと思ったときに「master」ブランチに変更を反映させていくと、他の人が同じ箇所を修正している場合や、並行して複数の機能を開発している場合に、 競合してしまって開発が進めにくくなることがあります。そのため、「master」ブランチから分岐させて、新たなブランチを追加し、そのブランチ上にコミットしていくことが多いです。
また、分岐したブランチにコミットした内容は、他のブランチとまとめることができます。このことを「merge(マージ)する」と言います。
そのため、「master」ブランチから分岐させた新しいブランチで新機能を追加し、実装し終えたら「master」ブランチに今までの変更を まとめて入れる(マージする)といったことができます。
また、ブランチはそれぞれのリポジトリ上で作成することができます。
ローカルリポジトリで作成したブランチをリモートリポジトリに反映したり、リモートリポジトリに存在しているブランチをローカルリポジトリに持ってくることもできます。
まとめ
以上、Git の仕組みや基本知識でした!
ここまでの内容をまとめておきます。
- リポジトリは、プログラムの変更履歴を保存する場所。
- ローカルリポジトリは 手元のパソコン内などにある各自が持っているリポジトリ、リモートリポジトリは 外部のサーバーなどにある複数人で共有して使うためのリポジトリのこと。
- ローカルリポジトリの中の変更履歴を、リモートリポジトリに送信して保存しておくことを「push(プッシュ)する」、リモートリポジトリに保存された変更履歴を、自分のローカルリポジトリに持ってくることを「pull(プル)する」と言う。
- プログラムをリモートリポジトリへ反映するときは、ワークツリー、インデックス、ローカルリポジトリ、リモートリポジトリという領域に順番に反映していく。
- ブランチという機能を使って、作業履歴を枝分かれさせることができる。