Gitは分散型のバージョン管理システム(VCS:Version Control System)です。VCSは主にアプリケーションのソースコードの管理を行いますが、システムの設定情報やドキュメントなど、様々な情報を管理することができます。そのため、DevOpsを実現する際の中核的な役割を担っていると言ってもよいでしょう。
ソースコード管理
Gitはソースコードの管理に最もよく使われています。
GitはCVSですので、ソースコードのバージョン、すなわち修正履歴を管理してくれます。この履歴を辿ることで、いつ、誰が修正を行ったのかを確認でき、元に戻したりすることもできます。
リポジトリとコミット
ソースコードの修正を適用するのが「コミット」です。
Gitではソースコードは「リポジトリ」で管理されており、ファイルに対して行った修正の差分はコミットすることでリポジトリに反映されます。
ブランチとマージ
ブランチは、リポジトリの修正差分を分岐させる機能です。
たとえば、新規にリポジトリを作成するとmainと呼ばれるブランチが作成されます。コミットを繰り返すとmainブランチが修正されていきます。しかし、開発途中のソースコードをmainブランチに適用したくない場合には、新たにdevelopブランチを作成します。developブランチを使って開発を進めていき、ある程度まとまって品質も問題なくなったソースコードをmainブランチに適用します。この作業を「マージ」と呼びます。
分散型VCSとGitサーバー
Gitは「分散型」のVCSです。
従来のVCSはサーバーがあり、開発者はサーバーにアクセスしてソースコードの修正を行っていくサーバー集中型のアーキテクチャでした。構造は分かりやすいですが、沢山の開発者がバラバラに強調して開発するスタイルには合っていませんでした。Gitは元々、Linuxカーネルの開発者であるLinus Trovaldsが、Linuxカーネルのように世界中の開発者が関わっているOSSの開発作業をスムーズに進めるために開発しました。
ローカルリポジトリとリモートリポジトリ
Gitでは、個々の開発者は手元にある「ローカルリポジトリ」で開発を進めていきます。そして適当なタイミングで、コミットしたソースコードを「リモートリポジトリ」に送ります。この処理を「プッシュ」と呼びます。各開発者がプッシュすることでソースコードが集まってきて、最終的なアプリケーションが出来上がるという仕組みです。
リモートリポジトリはGitをサポートしたサーバーが受け持ちます。有名なものではGitHubやGitLabなどがあります。
プルリクエスト(マージリクエスト)
分散開発では各開発者が自分のコミットをリモートリポジトリにプッシュしますが、これをすぐにmainブランチに適用してしまうと開発者間の修正に不整合が起きてしまうなどの問題が起きます。そこで、まずリモートリポジトリの開発用ブランチにプッシュし、このコミットをmainブランチにマージしてくれるように依頼します。これがプルリクエストです。プルリクエストは、mainブランチを管理する権限がある開発者が内容等を確認し、問題がなければmainブランチにマージします。
プルリクエストはGitHubの用語で、GitLabの場合にはマージリクエストと呼びます。